编写spider爬取

改写parse函数

实现功能:

1.获取文章列表页中的文章url并交给scrapy下载后,交给解析函数进行具体字段的解析
2.获取下一页的url并交给scrapy进行下载,下载完成后交给parse

提取一页列表中的文章url

#解析列表页中所有文章的url,遍历出来
def parse(self, response):
    # 解析列表页中的所有url并交给scrapy下载后进行解析
    post_urls = response.css(‘#archive .floated-thumb .post-thumb a::attr(href)‘).extract()
    for post_url in post_urls:
        print(post_url)

调试输出结果

如何让scrapy进行下载

引入request对象

from scrapy.http import Request

修改提取字段类类名为parse_detail,引入parse类进行域名拼接,yield下载

from urllib import parse
    def parse(self, response):

        #获取文章列表页中的文章url并交给解析函数进行具体字段的解析
        #获取下一页的url并交给scrapy进行下载,下载完成后交给parse
        post_urls = response.css(‘#archive .floated-thumb .post-thumb a::attr(href)‘).extract()
        for post_url in  post_urls:
            #yield Request(url=post_url,callback=self.parse_detail)
            yield Request(url=parse.urljoin(response.url, post_url),callback=self.parse_detail) #域名拼接 下载 下载完成后调用parse_detail解析字段

获取下一页并交给scrapy进行下载

        #提取下一页并交给scrapy下载
        next_url = response.css(‘.next.page-numbers::attr(href)‘).extract_first("")#空格去掉表示同时拥有两个属性
        if next_url:
            yield Request(url=parse.urljoin(response.url, next_url), callback=self.parse)  #继续调用parse解析出列表页中具体文章的url

调试前修改start_url为all-posts

调试结果

时间: 2024-08-25 17:46:13

编写spider爬取的相关文章

用crawl spider爬取起点网小说信息

起点作为主流的小说网站,在防止数据采集反面还是做了准备的,其对主要的数字采用了自定义的编码映射取值,想直接通过页面来实现数据的获取,是无法实现的. 单独获取数字还是可以实现的,通过requests发送请求,用正则去匹配字符元素,并再次匹配其映射关系的url,获取到的数据通过font包工具解析成字典格式,再做编码匹配,起点返回的编码匹配英文数字,英文数字匹配阿拉伯数字,最后拼接,得到实际的数字字符串,但这样多次发送请求,爬取效率会大大降低.本次集中爬取舍弃了爬取数字,选择了较容易获取的评分数字.评

Scrapy分布式爬虫打造搜索引擎——(二) scrapy 爬取伯乐在线

1.开发环境准备 1.爬取策略 目标:爬取“伯乐在线”的所有文章 策略选择:由于“伯乐在线”提供了全部文章的索引页 ,所有不需要考虑url的去重方法,直接在索引页开始,一篇文章一篇文章地进行爬取,一直进行到最后一页即可. 索引页地址:http://blog.jobbole.com/all-posts/ 2. 搭建python3虚拟环境 打开cmd,进入命令行,输入workon,查看当前存在的虚拟环境:  workon 为爬虫项目,新建python3虚拟环境: mkvirtualenv -p py

运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250

对于scrapy我们前面已经介绍了简单的应用,今天我们用一个完整的例子,爬取豆瓣电影TOP250来做一个小的练习,把scrapy阶段做一个总结. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 2.1 需要保存的数据 首先确定我们要获取的内容,在items中定义字段,来将非结构化数据生成结构化数据,获取的内容主要包括:排名.电影名称.得分.评论人数.如下

Scrapy-redis实现分布式爬取的过程与原理

Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取.但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来. 而Scrapy-Redis则是一个基于Redis的Scrapy分布式组件.它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用.scrapy-redi重写了scra

PHP爬取糗事百科首页糗事

突然想获取一些网上的数据来玩玩,因为有SAE的MySql数据库,让它在那呆着没有什么卵用!于是就开始用PHP编写一个爬取糗事百科首页糗事的小程序,数据都保存在MySql中,岂不是很好玩! 说干就干!首先确定思路 获取HTML源码--->解析HTML--->保存到数据库 没有什么难的 1.创建PHP文件"getDataToDB.php", 2.获取指定URL的HTML源码 这里我用的是curl函数,详细内容参见PHP手册 代码为 <span style="fo

爬取动态图片—以百度图片为例

一:何谓动态加载图片 所谓动态加载图片即指html刚加载时,图片时没有的,然后通过json发生有关图片的数据,在插入到html里面去,以到底快速打开网页的目的,那么问题来了?我们如何找到加载文件的json文件呢?而这个问题正是我们实现爬取百度图片的第一步,让小可爱告诉你怎么做吧. 我们以表情包这个关键字为例,如下图 小可爱在百度图片搜索表情包来到上图页面,然后按F12来到开发者页面, 我们点击二个json文件 如: ①https://image.baidu.com/search/acjson?t

爬虫实例 利用Ajax爬取微博数据

随着代理IP技术的普及,爬虫的使用也变得简单起来,许多企业和个人都开始用爬虫技术来抓取数据.那么今天就来分享一个爬虫实例,帮助你们更好的理解爬虫.下面我们用程序模拟Ajax请求,将我的前10页微博全部爬取下来.首先,定义一个方法来获取每次请求的结果.在请求时,page是一个可变参数,所以我们将它作为方法的参数传递进来,相关代码如下:首先,这里定义了base_url来表示请求的URL的前半部分.接下来,构造参数字典,其中type.value和containerid是固定参数,page是可变参数.接

Python爬取百度贴吧内容

参考资料:https://cuiqingcai.com/993.html  即 静觅» Python爬虫实战二之爬取百度贴吧帖子 我最近在忙学校的一个小项目的时候涉及到NLP的内容.但是在考虑如何训练的时候却才懂什么叫巧妇难为无米之炊的滋味.中文语料库实在少的可怜,偶尔有一两个带标签的语料库,拿出一看,标注惨不忍睹,都让我怀疑是不是机器标注的.正应了那句话,人工智能,有多少智能就有多少人工. 有什么办法呢,硬着头皮,走一步是一步吧,总比停滞不前要好.项目涉及到帖子,那么我相信不管是谁,首先想到的

spark学习进度7-Python爬取大学排名实例

利用pc编写python爬取大学排名的数据,如图: import requests from bs4 import BeautifulSoup import bs4 def getHTMLText(url): try: r = requests.get(url, timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def fillUnivLis