1.豆瓣新书的速递爬虫
地址:
豆瓣-新书速递https://book.douban.com/latest?icn=index-latestbook-all
思路分析:
1.获取首页的响应数据(里面有我们需要的翻译链接)
2.寻找下一页的地址,进行翻页,获取数据
代码实现
在爬虫文件的parse方法:
....
# 1,构造翻页
# 提取下一页url
part_url = response.xpath('//span[@class="next"]//a/@href').extract_first()
# 2,判断是否为下一页的条件
if '?subcat=' in part_url:
# 构造完整的url
next_url = response.urljoin(part_url)
print("下一页参数信息:", part_url)
print("下一页链接:", next_url)
# 构造scrapy.Request对象,并yield给引擎,利用callback参数指定该Request对象之后获取的响应用哪个函数进行解析
yield scrapy.Request(url=next_url, callback=self.parse)
2.meta参数的使用:
在爬虫文件的parse方法里,提取详情页增加之前callback指定的parse_detail函数:
...
# 爬虫默认自带的解析方法
def parse(self,response):
...
yield scrapy.Request(url=item['link'],
callback=self.parse_detail, meta={'item': item})
...
# 新建一个解析方法 用于解析详情页 里面一定要有resposne参数
def parse_detail(self,response):
# 获取meta传递过来的参数给item字典接收
item = resposne.meta["item"]
1.meta参数是一个字典
2.meta字典中有一个固定的键proxy,表示代理ip。
3.定义实现随机User-Agent的下载中间件
在middlewares.py中完善代码middlewares.py中自带的代码可以删除掉
import random
class UserAgentDownloadMiddleware(object):
user_agent = [
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
'Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16.2'
]
# 方法名是scrapy规定的方法 (协商机制)
# 每个交给下载器的request对象都会经过该方法,并期望返回response
def process_request(self, request, spider):
# 获取随机请求头
u_a = random.choice(self.user_agent)
# 设置请求头
request.headers['User-Agent'] = u_a
(1)在setting中设置开启自定义的下载中间件,设置方法同管道setting文件所写
4.代理ip的使用
(1)代理添加的位置:request.meta中增加proxy字段
(2)获取一个代理ip,赋值给request.meta['proxy']
具体的实现
class RandomProxy(object):
ip_list = [
'116.26.39.23:4215',
'42.56.239.136:4278',
'115.234.192.226:4275',
]
def process_request(self, request, spider):
proxy = random.choice(self.ip_list)
# 需要加上https://,否则报错
# 修改请求的元数据字典 用于给框架中其他组件传递信息 比如给其添加一个代理
request.meta['proxy'] = 'https://' + proxy
同时在setting.py中开启中间件
DOWNLOADER_MIDDLEWARES = {
'douban.middlewares.RandomProxy': 100,
'douban.middlewares.UserAgentDownloadMiddleware': 200,
}
下一篇,附带豆瓣爬虫源码。