学习爬虫框架scrapy时的一些收获

scrapy作为python中的一个爬虫框架,功能十分强大,内部实现了twisted的异步调用,在一定程度上提升了运行效率,并且由于scrapy爬虫有着相对固定的结构,内部封装了众多功能,因此只要逻辑清晰,初步掌握scrapy还是比较容易的。作为一个小白,刚刚接触scrapy,计划用scrapy爬取知乎上感兴趣的话题以及其热门问答,现记录一下自己在学习中的一些感悟,如果有不对的地方欢迎指正。

  1. 爬取知乎第一步是模拟登录,关于模拟登陆知乎的技术文章有很多,大体思路都是先获取_xsrf以及验证码,然后以post的方式提交登录信息。在此不进行详细阐述,具体步骤可以参考这两篇文章:http://www.jianshu.com/p/3debfb110ad9,http://blog.csdn.net/hudeyu777/article/details/76706007,对于模拟登录时的的一些细节讲解的很清楚;在scrapy中模拟登录时也可以采用这种方式,scrapy中有一个FormRequest.from_response函数,可用于提交表单信息,模拟用户登录,在登陆之后,必须传递cookies,以保持登录状态,此时必须在setting中设置cookies中间件,并开启cookies功能,然后使用cookiejar对cookie进行传递。如下:

for i, url in enumerate(urls):
    yield scrapy.Request("http://www.example.com", meta={‘cookiejar‘: i},
        callback=self.parse_page)在后续访问中传递cookie:
def parse_page(self, response):
    # do some processing
    return scrapy.Request("http://www.example.com/otherpage",
        meta={‘cookiejar‘: response.meta[‘cookiejar‘]},
        callback=self.parse_other_page)    除此之外,还有一个野路子,可以先在其他程序中模拟登陆之后,将cookies以文件的形式保存下来,然后在scrapy中导入cookie文件,直接在scrapy.Request方法中添加cookies字段即可,cookies只添加一次即可,scrapy会自动传递,前提是在设置中开启了cookie及其中间件。需要注意的是cookie应该为字典形式。   2.在爬取时有时会遇到网页爬取失败的现象,但是有次我多次爬取某个网页,返回的均是同样的结果,排除登录状态和IP被封禁等因素后,我想起来我在setting中,设置了HTTPCACHE_ENABLED=True,也就是说当爬取相同网页时会直接加载之前的缓存,以加速爬取,这样就会导致之前的失败信息再次返回。   3.在具体的spider编写时,有时需要在两个函数间传递参数,例如item信息等,当我在meta中直接传递item时,发现最后输出的item信息错乱。仔细思索后意识到由于scrapy采用了异步调用的机制,也就是说当发出一个请求之后,并不会一直等待response的返回,而是马上发出其他请求,当收到之前请求的response之后,再将其传递给回调函数。这就会导致当response返回给回调函数时,其item信息已经被其他request修改(item相当于全局变量),因此传到回调函数的item中很可能含有不属于该request的信息。最保险的方法是在meta中传递item的具体值,避免直接传递item,并且item的赋值应在同一个函数内完成。
时间: 2024-11-29 12:03:32

学习爬虫框架scrapy时的一些收获的相关文章

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

欢迎加入Python学习交流群:535993938  禁止闲聊 ! 名额有限 ! 非喜勿进 ! 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于

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

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可

教你分分钟学会用python爬虫框架Scrapy爬取你想要的内容

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 python爬虫学习课程,下载地址:https://pan.baidu.com/s/1v6ik6YKhmqrqTCICmuceug 课程代码原件:课程视频: 原文地址:http://blog.51cto.com/aino007/2123341

分享《精通Python爬虫框架Scrapy》中文PDF+英文PDF+源代码

下载:https://pan.baidu.com/s/13tFIFOhDM8PG9pFUuA8M2g 更多分享资料:https://www.cnblogs.com/javapythonstudy/ <精通Python爬虫框架Scrapy>中文PDF+英文PDF+源代码 中文版PDF,364页,带目录和书签,文字可以复制粘贴,彩色配图:英文版PDF,270页,带目录和书签,文字可以复制粘贴,彩色配图:中英文两版对比学习.配套源代码. 其中,中文版如图: 原文地址:https://www.cnbl

分享《精通Python爬虫框架Scrapy》+PDF+源码+迪米特里奥斯+李斌

下载:https://pan.baidu.com/s/1-ruuQebCnyLVt5L8RATT-g 更多资料:http://blog.51cto.com/14087171 <精通Python爬虫框架Scrapy>中文PDF+英文PDF+源代码 中文版PDF,364页,带目录和书签,文字可以复制粘贴,彩色配图:英文版PDF,270页,带目录和书签,文字可以复制粘贴,彩色配图:中英文两版对比学习.配套源代码. 其中,中文版如图: 原文地址:http://blog.51cto.com/140871

Learning Scrapy:《精通Python爬虫框架Scrapy》Windows环境搭建

之前用爬虫抓点数据的时候基本上就是urllib3+BeautifulSoup4,后来又加入requests,大部分情况就够用了.但是最近心血来潮想学一下Scrapy,于是找了本书——<精通Python爬虫框架Scrapy>.内容算是比较可以的,但是按书中附录搭建环境着实折腾了一点时间,于是想把碰到的问题总结一下,让大家也少走点弯路. 进入正题之前,有几点要说明一下: 安装这个环境有什么用?这个环境就是一个服务器,有需要你抓的网站,不会因现实中的网站改版而造成代码失效,书中测试代码的网站基本上都

小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础(五) Spider Middleware

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

爬虫框架Scrapy

前面十章爬虫笔记陆陆续续记录了一些简单的Python爬虫知识, 用来解决简单的贴吧下载,绩点运算自然不在话下. 不过要想批量下载大量的内容,比如知乎的所有的问答,那便显得游刃不有余了点. 于是乎,爬虫框架Scrapy就这样出场了! Scrapy = Scrach+Python,Scrach这个单词是抓取的意思, 暂且可以叫它:小抓抓吧. 小抓抓的官网地址:点我点我. 那么下面来简单的演示一下小抓抓Scrapy的安装流程. 具体流程参照:官网教程 友情提醒:一定要按照Python的版本下载,要不然

怎么在32位windows系统上搭建爬虫框架scrapy?

禁止转载: 自学python,然后搭建爬虫框架scrapy.费了我一上午的心血.终于搭建成功,以防以后忘记搭建流程,特此撰写此贴,开写 *************************************************************************************************************** 首先安装python,我安装的是python2.7.12,安装在F:\python2.7.12,资源自行下载.由于在安装python的时候,