目标:抓取主页name、price、url。详情页introduce、address、phone_number
我们依旧采用Scrapy框架,并用Pyquery解析
废话不多说,先上结果、步骤与代码:
步骤:
因篇幅过大,步骤可参考上篇
代码如下:
items.py:定义我们所要爬取的信息的相关属性,此例中需要爬取的是name、price、url、introduce、address、phone_number
City_58_test.py:主要是用于定义请求链接,并使用pyquery选取目标元素
pipeline.py:当item数据被city58_test爬虫爬取好并返回给引擎以后,引擎会把item交给City58Pipeline这个管道处理。这个pipeline文件负责打开关闭文件,并写入文件
middleware.py:随机选取User-Agent,并把它赋值给传入进来的request
settings.py:开启City58Pipeline管道,middliwares下载中间件与robots协议
main.py:运行爬虫
各文件详情:
参考上篇文章
现主要讲解middleware.py中间件:
Scrapy框架中的中间件主要分两类:蜘蛛中间件和下载中间件。其中最重要的是下载中间件,反爬策略都是部署在下载中间件中的
我们在这加入各大搜索引擎的UA,使我们的爬虫更接近于人的操作
爬虫神器——各大搜索引擎的User-Agent:
Chrome浏览器:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36’,
百度爬虫:‘Mozilla/5.0 (compatible; Baiduspider/2.0; - +http://www.baidu.com/search/spider.html)’,
IE9浏览器:‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)’,
谷歌爬虫:‘Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)’,
必应爬虫:‘Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)’,
总结:
当你用过几次scrapy框架,发现很多文件都是套路化的,例如:58爬虫中,除City_58_test.py需大幅度修改,其他文件都可套用与其他爬虫
58的网页结构不适合用xpath,所以我们用pyquery,更方便简洁
有不清楚的地方,大家可以留言,点赞,我看到了,会第一时间回复你