pyspider初探

简介

pyspider是一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。官方文档地址:http://docs.pyspider.org/en/l...css

安装

首先确保已有python与pip,如若没有自行安装python环境以及pip模块。
pyspider同时支持linux与windows环境,但做者说了因为他本身也没有windows的工做环境因此windows下pyspider没法保证性能与正常工做(反正我在windows下的pyspider无法儿用),因此推荐使用linux运行。
官方文档上有一键配置环境的指令,这些都是运行pyspider所必要的环境。
apt-get install python python-dev python-distribute python-pip \
libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml \
libssl-dev zlib1g-dev
不过对于ubuntu系统,貌似其实只须要libcurl4-openssl-dev和libssl-dev就能够了。
完成基本环境配置,运行pip install pyspider便可安装pyspider。html

运行

在命令行中输入指令pyspider便可,通常默认端口为5000。以后在浏览器中输入localhost:5000便可看到web UI界面。
选择右侧的“create”按钮,能够新建爬虫脚本并设置初始的URL,完成建立后进入查看
图片描述
左侧能够显示抓取的信息。"web"即直接在下方白色区域显示网页,"html"即显示html文件,"follow"表示在执行完全部“第一轮”回调函数后还有多少url待爬取
图片描述
点击网址右侧的“play”按钮,便可针对该网址进行爬取,并输出想要的信息。
这一界面主要用来调试,毕竟你不可能手动把那么多按钮全按一遍。调试无问题后,返回到以前的界面,将“TODO”改成“running”,并点击右侧的“run”按钮,便可开始运行爬虫。点击"active task"能够查看爬虫的运行状况,点击“result”则可查看结果,结果保存的是你在爬虫脚本中return的信息。更多基础内容请查看http://docs.pyspider.org/en/l...
可是这个web ui有的时候会有问题(反正我这边如今就有问题),可能你调试时没有任何问题,但使用webui运行却迟迟没有结果。这时能够考虑转用命令行运行,python

pyspider one spiderfile.py

便可开始运行你的爬虫程序。更多关于命令行的命令,请查看http://docs.pyspider.org/en/l...linux

url设置

有时咱们所需的内容是包含在html文件中的,有时则是由AJAX异步加载获得的,原始的html文件中并无咱们要的数据,而爬下来的html又不会执行js脚本。使用phatomjs是一种方法,但也能够去查看异步加载的请求网址,转而设置对该url进行爬取。
查看方法即打开“开发者工具”的“网络”部分,刷新网页,便可看到全部的请求信息,找到你须要的数据对应的请求便可。
图片描述web

网页元素筛选

爬虫能够爬取到网页信息,但显然咱们并不须要全部的网页信息,不然使用urllib2进行http访问就好了。在回调函数的返回值response中,你能够调用多个方法将它转换成不一样的便于删选的类再进行操做,这里咱们使用response.doc将其转为pyquery对象。
pyquery对象最简单也最好用的,就是使用css selector进行筛选。若是你想的数据是标签是某个class,就加入.classname的selector;有某种id,则加入#idname的selector;属于某种标签,则加入tagname的selector;有某种属性值则加入[attr="xxx"],或者简单点属性值开头是某个字段则加入[attr^="xxx"]。
常规的筛选如response.doc('.class #id tag [attr=]'),这样写表示标签或类并列或后面的嵌套在前面里,这样返回的是符合条件的pyquery对象,response.doc('')则能够直接将整个html文件内容转为pyquery并返回。
若符合条件的pyquery有多个条目,可使用pyquery.items()返回每一个条目进行处理,返回的item仍然是pyquery对象,pyquery.text()能够获取html标签内的内容,pyquery.attr.attrname能够得到对应标签的属性值。
pyspider提供了方便的css selector判断工具,在以前的详情页点击最左侧的"enable css selector",在web页面中选中某一区域,便可显示该区域含有的css selector中最少重叠的部分(不大懂怎么形容,就是用显示的便可选中该元素同时选中最少的其余元素),同时会显示根据这个selector选中的其余元素,加粗部分的css即所需部分。
图片描述
有的时候,没法根据CSS来进行甄别该元素是否为所需元素(有些网页就是这样),这时可使用parents、siblings等方法查看其父标签、兄弟标签等的内容来进行筛选。更多pyquery的方法请查看http://pythonhosted.org/pyque...数据库

对爬虫进行设置

大多数网站如今都有反爬虫机制,因此简单的爬虫若是打算爬取大量数据则会被临时甚至永远禁止访问。但所谓道高一尺魔高一丈,有反爬虫天然也有反反爬虫。
反爬虫机制首先是你被发如今明显以很是规的频率访问,因此最简单粗暴也最有效的方法就是将爬虫运行设置的慢一点,频率第一点。在web ui中设置rate/burst或者在脚本文件开头使用注释的方式进行设置。rate表示每秒中进行的请求数,小于1时表示数秒请求1次;burst则是最大并发数。ubuntu

# rate: 1.0
# burst: 3

但有时这样确实太太太慢了,并且并非全部网站都有很严格的反爬虫机制。不少网站使用的方式是检查请求的headers或cookie,非浏览器在默认状况下请求的headers是跟浏览器不同的,同时也没有cookie。headers和cookie能够在Handler类的crawl_config中进行设置,也能够在执行self.crawl时对对应参数进行设置。windows

crawl_config = {
    'headers': {
        'key': 'value',
    },
    'cookie': {
        'key': 'value'
    },
    # ......
}

or后端

self.crawl(url, headers={}, cookie={}, callback=xxx_page)

还能够考虑使用代理,轮换IP进行请求爬取,设置方式与headers和cookie相似,key为proxy,值为IP地址的字符串。api

结语

pyspider还有更多更强大的功能,有待有兴趣的各位去探寻。

相关文章
相关标签/搜索