scrapy使用总结


scrapy介绍

第一重要的文档当然是官方文档[1],看完入门介绍[2]之后,重点关注一下几个方面:

系统架构

Python爬虫(六)–Scrapy框架学习

中间件

user-agent的选择

class UserAgentMiddleware(object):
    """ 换User-Agent """
    def process_request(self, request, spider):
        agent = random.choice(agents)
        request.headers["User-Agent"] = agent

proxy ip 代理更换
方法一: 使用Random proxy middleware for Scrapy,可以直接用pip install scrapy_proxies,这是在多个代理ip中随机切换
方法二: 如果只有一个代理,可以直接设置环境变量来实现。也可以使用scrapy自带的proxy插件。多代理的代码实现也可以参考stackoverflow: Scrapy and proxies

pipeline

一些核心的类

  • request
  • response

可能用到的python知识

理解yield之What does the “yield” keyword do in Python?

更高级的话题

  • 分布式

源码分析

csdn上self-motivation写的一系列scrapy源码分析,例如可以通过设置RANDOMIZE_DOWNLOAD_DELAY = True来开启随机下载延迟

使用举例

github上关于新浪微博的抓取项目, 新浪微博爬虫(Scrapy、Redis)

安装问题

安装环境
linux mint (ubuntu 14)
python 2.7.6
scrapy 1.3.3

(一) Twisted TLSVersion的问题
直接使用sudo pip install scrapy安装最新的scrapy,在shell命令行内运行scrapy出现error提示

twisted/internet/_sslverify.py", line 38, in TLSVersion.TLSv1_1: SSL.OP_NO_TLSv1_1, AttributeError: 'module' object has no attribute 'OP_NO_TLSv1_1'

从上面的错误提示中,能够大概看出是Twisted包的问题。使用pip list 查看各个包的版本号,Twisted的版本号是17。有两种解决办法,

  1. 降低Twsited的版本号
    使用sudo pip install Twsited==16.4.1 ,降低版本之后,发现scrapy就可以正常使用了

  2. 使用虚拟环境
    官方安装文档[3]中有提到推荐使用virtual environment的方式安装scrapy,更具体参考这一节install scrapy using virtualenvvirtualenv的官方指南
    shell过程如下

$ sudo pip install virtualenv  #安装虚拟环境工具
$ virtualenv ENV  #创建一个虚拟环境目录
$ source ./ENV/bin/activate  #激活虚拟环境, 注意下面$前面的(Env)
(ENV) $ pip install Scrapy

(ENV) $ deactivate # 禁止激活
$ rm -r ENV #移除虚拟环境目录

(二)no module named win32api 问题
在windows环境中会遇到这个问题,原因是缺少win32,到 http://sourceforge.net/projects/pywin32/files/找到对应的版本下载安装即可

反爬虫

Scrapy爬虫反ban的技巧


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Scrapy和Selenium相结合可以实现浏览器模拟操作,实现一些对JavaScript渲染页面的爬取。一旦页面成功加载后,可以将数据传递给Scrapy的Pipeline进一步处理。 要在Scrapy使用Selenium,首先需要在Scrapy的Spider中启用Selenium。可以使用get方法实例化一个Selenium的浏览器对象,并在spider中实现handle_httpresponse方法,在该方法中调用Selenium进行页面渲染,等待JavaScript执行完成后,将渲染后的页面HTML代码返回。 在Spider中进行页面处理后,可以通过yield将数据传递给Scrapy的Pipeline进行进一步处理和存储。Pipeline是Scrapy中的一个处理组件,用于将爬取到的数据进行存储、清洗、筛选或其他处理操作。 要在Pipeline中处理数据,首先需要在settings.py文件中启用Pipeline并设置优先级。然后,在Pipeline文件中实现相应的处理逻辑,例如存储至数据库、保存至本地文件等。 对于使用Selenium渲染的页面数据,可以在Pipeline中进一步处理,例如解析HTML代码、提取指定元素等。可以使用lxml等库对页面进行解析,得到所需的数据。处理完成后,可以进行存储或其他后续操作。 总结来说,使用Scrapy和Selenium结合使用时,可以在Spider中调用Selenium进行页面渲染,等待JavaScript执行完毕后返回渲染后的页面。然后将处理后的数据通过yield传递给Scrapy的Pipeline进行进一步处理和存储。在Pipeline中可以加入特定的处理逻辑,对数据进行解析、存储等操作。这样就实现了Scrapy使用Selenium后调用Pipeline的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值