scrapy使用总结

来源:互联网 发布:win10 1709 知乎 编辑:程序博客网 时间:2024/06/15 04:24

    • scrapy介绍
      • 系统架构
      • 中间件
      • pipeline
      • 一些核心的类
      • 更高级的话题
      • 源码分析
    • 使用举例
      • 安装问题
    • 反爬虫


scrapy介绍

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

系统架构

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

中间件

  • downloader middleware

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

  • 重点内容spider middleware

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 virtualenv 和 virtualenv的官方指南
    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
原创粉丝点击