admin 管理员组

文章数量: 887021

1. 翻页请求的思路

回顾requests模块是如何实现翻页请求的:

(1)找到下一页的URL地址,并找出翻页以后的url中的那个参数变动了

(2)调用requests.get(url)

同样地scrapy实现翻页的思路:

(1)找到下一页的url地址,找出翻页后的变化规律,拼接url

(2) 构造url地址的请求,传递给引擎

2 .scrapy实现翻页请求

2.1 实现方法

(1)确定url地址并通过拼接参数的方式构建出新的翻页后的url

(2)构造请求,scrapy.Request(url,callback)

注:callback:指定解析函数名称,表示该请求返回的响应使用哪一个函数进行解析

(3)把请求交给引擎:yield scrapy.Request(url,callback)

2.2 爬取举例

通过爬取腾讯招聘的页面的招聘信息,学习如何实现翻页请求

思路分析:

(1)获取首页的数据

(2)寻找下一页的地址,进行翻页,获取数据

注意:

(1)可以在settings中设置ROBOTS协议

    ```
    # False表示忽略网站的robots.txt协议,默认为True
    ROBOTSTXT_OBEY = False
    ```

(2)可以在settings中设置User-Agent:

    ```
    # scrapy发送的每一个请求的默认UA都是设置的这个User-Agent
    USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
    ```

2.3 代码实现

在爬虫文件的parse方法中:

# 提取下一页的href并拼接url
    next_url = 'https://hr.tencent/' + response.xpath('//a[text()="下一页"]/@href').extract_first()
    # 判断是否是最后一页
    if response.xpath('//a[text()="下一页"]/@href').extract_first() != 'javascript:;':
        # 构造scrapy.Request对象,并yield给引擎
        # 利用callback参数指定该Request对象之后获取的响应用哪个函数进行解析
        # 利用meta参数将本函数中提取的数据传递给callback指定的函数
        # 注意这里是yield
        yield scrapy.Request(next_url, callback=self.parse)

2.4 scrapy.Request的更多参数

scrapy.Request(url[,callback,method="GET",headers,body,cookies,\
meta,dont_filter=False])

参数注释:

1.  中括号中的参数为可选参数
2.  callback:表示当前的url的响应交给哪个函数去处理
3.  meta:实现数据在不同的解析函数中传递,meta默认带有部分数据,比如下载延迟,请求深度等
4.  dont_filter:默认为False,会过滤请求的url地址,即请求过的url地址不会继续被请求,对需要重复请求的url地址可以把它设置为Ture,比如贴吧的翻页请求,页面的数据总是在变化;start_urls中的地址会被反复请求,否则程序不会启动
5.  method:指定POST或GET请求
6.  headers:接收一个字典,其中不包括cookies
7.  cookies:接收一个字典,专门放置cookies
8.  body:接收一个字典,为POST的数据

 

本文标签: 翻页 如何实现 数据 scrapy