三. Scrapy框架爬虫自动翻页及设置UA
1. 爬虫自动翻页方法
这里主要介绍两种翻页方法,一个是对页面源码中“下一页”进行解析,一个是直接对爬取的网站地址url进行分析。
第一种
基于上一章节所描述的对于python吧的爬虫,我们增加自动翻页功能来做进一步的完善。
我们可以发现,在python吧的页面源码中,当翻到最后一页时,“下一页”就消失了,所以可以根据这一特点进行解析,具体代码如下:
# -*- coding: utf-8 -*-
import scrapy
from FirstSpider.items import FirstspiderItem
class TiebaSpider(scrapy.Spider):
name = 'TieBa' # 爬虫名
allowed_domains = ['tieba.baidu.com'] # 爬虫域
start_urls = ['http://tieba.baidu.com/f?fr=wwwt&kw=python'] # 爬虫起始地址
def parse(self, response):
for li in response.xpath('//li[@class=" j_thread_list clearfix"]'):
item = FirstspiderItem()
item['title'] = li.xpath('./div/div[2]/div[1]/div[1]/a/text()').extract_first()
item['author'] = li.xpath('./div/div[2]/div[1]/div[2]/span[1]/span[1]/a/text()').extract_first()
item['rep_num'] = li.xpath('./div/div[1]/span/text()').extract_first()
yield item
# 列表页翻页
next_url = response.xpath('//div[@id="frs_list_pager"]/a[contains(text(), "下一页>")]/@href').extract_first()
if next_url is not None:
next_url = 'http:' + next_url
yield scrapy.Request(
next_url, callback=self.parse,
)
之后执行爬虫并将结果保存到csv文件中:scrapy crawl TieBa -o tb_all.csv
最后一共爬取了45239条,可以看出贴吧基本没有设立反爬机制,很适合新手进行练习。
第二种
从爬取的url中我们可以看出,都是有规律可寻的:
第一页
http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0
第二页
http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
第三页
http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=100
…
所以我们可以在start_urls部分直接将url进行一个迭代,具体代码如下:
start_urls = ['http://tieba.baidu.com/f?kw=python&ie=utf-8&pn={}'.format(i) for i in range(0,5000,50)] # 获取1-100页的数据
至此,两种自动翻页的方法已经介绍结束,下一章主要针对拉勾网进行爬虫,并对数据结果进行分析。