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方法

  

Python爬虫【四】Scrapy+Cookies池抓取新浪微博的更多相关文章

  1. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

  2. python爬虫之分析Ajax请求抓取抓取今日头条街拍美图(七)

    python爬虫之分析Ajax请求抓取抓取今日头条街拍美图 一.分析网站 1.进入浏览器,搜索今日头条,在搜索栏搜索街拍,然后选择图集这一栏. 2.按F12打开开发者工具,刷新网页,这时网页回弹到综合 ...

  3. Python爬虫实战:使用Selenium抓取QQ空间好友说说

    前面我们接触到的,都是使用requests+BeautifulSoup组合对静态网页进行请求和数据解析,若是JS生成的内容,也介绍了通过寻找API借口来获取数据. 但是有的时候,网页数据由JS生成,A ...

  4. Python爬虫入门教程 45-100 Charles抓取兔儿故事-下载小猪佩奇故事-手机APP爬虫部分

    1. Charles抓取兔儿故事背景介绍 之前已经安装了Charles,接下来我将用两篇博客简单写一下关于Charles的使用,今天抓取一下兔儿故事里面关于小猪佩奇的故事. 爬虫编写起来核心的重点是分 ...

  5. [Python爬虫] 之八:Selenium +phantomjs抓取微博数据

    基本思路:在登录状态下,打开首页,利用高级搜索框输入需要查询的条件,点击搜索链接进行搜索.如果数据有多页,每页数据是20条件,读取页数 然后循环页数,对每页数据进行抓取数据. 在实践过程中发现一个问题 ...

  6. Python爬虫入门教程 46-100 Charles抓取手机收音机-手机APP爬虫部分

    1. 手机收音机-爬前叨叨 今天选了一下,咱盘哪个APP呢,原计划是弄荔枝APP,结果发现竟然没有抓到数据,很遗憾,只能找个没那么圆润的了.搜了一下,找到一个手机收音机 下载量也是不错的. 2. 爬虫 ...

  7. Python爬虫之-动态网页数据抓取

    什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意 ...

  8. 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scr ...

  9. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

随机推荐

  1. Windows 7中200M神秘隐藏分区

    裸机全新安装Windows 7的用户,在安装完成后运行diskmgmt.msc打开磁盘管理器,可以看到在系统分区(一般为C分区)之前有一个大小为200MB的隐藏分区.这个特殊的隐藏分区与Windows ...

  2. 时间序列模式(ARIMA)---Python实现

    时间序列分析的主要目的是根据已有的历史数据对未来进行预测.如餐饮销售预测可以看做是基于时间序列的短期数据预测, 预测的对象时具体菜品的销售量. 1.时间序列算法: 常见的时间序列模型; ​ 2.时序模 ...

  3. fullpage插件在移动端弹出键盘页面特殊处理

    fullpage插件大家都很熟悉 jquery一款全屏上下滑动的插件. 最近做公司一个活动移动端使用fullpage插件填写input的时候遇见一个问题,手机自带的键盘弹出的时候会把页面顶出去,页面错 ...

  4. python threading acquire release

    线程同步 //test.py import threading import time exitFlag = 0 class myThread (threading.Thread): def __in ...

  5. Express web框架

    哈哈,还是Node.JS哦 现在我们来看看位Node.JS些的Express webkuangjia 一. 安装express npm install express -g --save npm in ...

  6. cocos2d-x JS 开启远程代码调试

    为了方便服务端与测试部门的工作需要,把客户端的写的程序可以在其他电脑上运行,方便他人工作与测试. 下面是cocos2d-x JS WebStorm 的设置方法.

  7. 多么痛的领悟---关于RMB数据类型导致的元转分分转元的bug

    关于金额的数据类型,以及元转分分转元之间这种转换,以及元和分的比较,我相信很多人都踩过坑. 反正我是踩过. 而且,昨天和今天又重重的踩了两脚. 代付查询接口,支付中心给溢+响应的报文里,amount的 ...

  8. MyBatis基础入门《十八》动态SQL(if-where)

    MyBatis基础入门<十八>动态SQL(if-where) 描述: 代码是在<MyBatis基础入门<十七>动态SQL>基础上进行改造的,不再贴所有代码,仅贴改动 ...

  9. LeetCode112.路径总和

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22 ...

  10. 有关g++的Xlinker选项

    事情的起因是,在使用Eclipse配置opencv的库时,发现使用-Wl 选项需要自己在Linker flags的输入框里指定.并不是像使用-l选项或-I选项那样可以直接添加选项的条目就可以了.但是在 ...