失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > scrapy微博反爬虫_Python爬虫【四】Scrapy+Cookies池抓取新浪微博

scrapy微博反爬虫_Python爬虫【四】Scrapy+Cookies池抓取新浪微博

时间:2021-10-25 18:53:39

相关推荐

scrapy微博反爬虫_Python爬虫【四】Scrapy+Cookies池抓取新浪微博

1.设置ROBOTSTXT_OBEY,由true变为false

2.设置DEFAULT_REQUEST_HEADERS,将其改成request headers

3.根据请求连接,发出第一个请求,设置一个start_request方法,并在方法中定义相关的配置,好比在本例中设置搜索的关键字keyword

4.接下来定义一个连接,也就是start_url,本例中改成search_url,其中把base_url定义为该类的全局变量,后面的参数用于翻页设置等

5.根据网页源码中的Form Data,定义一些其余的要求,好比本例中的最大页码数

6.在start_requests方法中,构造请求url的可变参数部分,search_url和keyword部分,用formate()传入

7.由于最大页数为100,接下来须要构造100个请求,利用for循环,page从1-100进行遍历

8.在for循环中把Form Data传过去,mp就是max_page,把mp和page都转换成字符串的形式

9.生成post请求,这里用FormRequest来构造,第一个参数就是构造的url,回调函数是网页解析方法parse_index函数,formdata直接赋值为data

10.借助cookie池,从中随机取出一个cookie赋值给request,因此接下来在middleware里面定义一个中间件,定义一个CookiesMiddleware类

11.在类中改写请求,定义一个process_request方法,在对request进行改写,先要拿到cookies

12.在类中定义一个方法_get_random_cookies用来随机获取一个cookies

13.在_get_random_cookies方法中,用request库的get请求,传入url,这个url是cookie池的微博random的url,请求一次便可获取一个cookies值,http://127.0.0.1/weibo/random

14.而后判断response的返回状态码==200则成功,而后就把网页内容用json解析,

15.获取cookie只需在process_request中调用_get_random_cookies方法,若是获取到了cookie,就把request.cookies正常改写。

16.在process_request中用logger,而后用json的dumps输出成字符串

17.把cookie池的微博random的url配置成可变参数,实现结构化,首先在CookiesMiddleware中定义一个类方法from_crawler,实现把配置的url配置到全局的settings里面

18.利用from_crawler中的crawler对象获取settings里面的相关信息crawler.settings.get('COOKIES_POOL_URL'),而后在settings里面设置COOKIES_POOL_URL = 'http://127.0.0.1/weibo/random'

19.接下来在__init__方法中接收cookies_pool_url,并把它设置为一个全局的变量,request的get方法也能够用全局的cookies_pool_url代替

20.改写以前cookies的开关,改写settings中的DOWNLOADER_MIDDLEWARES,改为咱们设置的名字

21.改写parse_index方法,进行网页索引,首先抓取每篇微博,微博最外面的条目能够用id来识别,用contains,第一个参数传入id,第二个参数传入id的值,也就是‘M_’,就能够判断class=c,而且id是以M_开头的

22.抓取下来的列表是个列表,而后对其进行遍历

23.在遍历里面要判断微博是原创仍是转发的,判断class=cmt的为转发的,首先拿到原文评论的链接形式,这里用contains选择器,第一个参数是. 表示选择的是当前的文本 第二个参数是用文本特征截取

24.若是是原创微博,就直接获取评论的超连接.这样就分了两种状况对详情页进行了抽取,接下来对微博详情页进行解析yield

25.定义parse_detail方法,url能够经过response.url得到,用xpath获取正文内容content

26.用scrapy提供的调试工具parse进行调试 scrapy parse url -c parse_detail,在用join方法把获取的列表中的内容拼接起来。

27.在items文件里面设置一个item,对提取到的信息进行赋值.引入Item,Field,同时构造一些字段把它构形成item,这些字段就是从网页所提取的内容

28.在weibo.py中引入WeiboItem,并给他实例化一个对象,而后把field一个个赋值

29.在pipelines对拿到的数据进行改写清洗,例如时间改为合理的格式

30.定义mongopipeline,用来将数据存储到MongoDB数据库,首先定义一个初始化的init方法,传入两个参数,一个是数据库链接的uri,一个是数据库链接

31.from_crawler的类方法,这里经过crawler把类的两个参数拿到settings里面相关的配置,这样就能够把上面的两个参数放到settings里面

32.构建open_spider方法,在spider开启时默认调用里面的语句,这样能够在里面作一些相关的初始化操做,好比能够把MongoClient数据库的链接打开。接下来还须要建立MongoDB的链接数据库的链接信息

33.相应的构建一个close_spider方法

34.最重要的构建process_item方法,来对item进行操做,再对数据库进行一下插入操做,在WeiboItem里面定义一个属性叫table_name,再传到process_item方法

35.接下来调用update方法,第一个参数传入查询的字段,此处用id来查询,第二个参数须要传入item,把它转换成字典的形式,第三个参数传入True,意味着若是查询到该内容,就对其更新,若是没有查到就对其插入,即去重

36.在settings中的ITEM_PIPELINES开启调用,最后把mongo_uri和mongo_db这两个参数写入settings

37.针对微博的反爬虫,处理跳转到相似一些封号的页面,构建process_response方法

如果觉得《scrapy微博反爬虫_Python爬虫【四】Scrapy+Cookies池抓取新浪微博》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。