爬虫总结
个人的一些爬虫经验总结
关于请求: python中向网站发起请求的库有urllib, urlib2等,这两个应该是python解释器的默认库,我当时学习的时候却是由requests出发的,相较于前两个,requests是在它们之上再封装的,添加请求头等信息非常方便。 requests高度自由,适合个性化的小型爬虫。可以获得文本,图像,音频,视频等信息。
关于解析: 我常用的是xpath,因为xpath可以在firefox浏览器直接复制,这能极大的减少查找节点的时间。当然,我并不会局限于这一种方式,大多数时候都是xpath和正则齐用。还有的推荐的就是beautifulsoup,也是一种遍历html结构树的方法。
静态和动态页面: 如果爬取的是静态页面,那么直接向该页面发起请求得到html,用适当的解析方式解析就能得到想要的信息。
然而,对于生活中大多数的网站,使用的都是动态加载技术,以便用户有更好的体验。这对爬虫编写者来说是梦魇般的存在。初步的分析总是查看一个个的链接,看看想要的信息是否在这个链接里。这种含有信息的链接一般都是json格式,所以我大多数都会去看json格式的动态加载页面。
如果这个网站较为简单,可能找到某个关键的页面就完事儿。但是大多数情况下,构建这个关键页面的url的参数是不知道的,这还得从大量的url中寻找。总之,爬取使用动态加载技术的页面的方法之一就是从大量的url页面中寻找信息,构建url,在寻找信息的过程。这个过程相当的复杂,需要有大量的经验,到最后如同三国杀神吕蒙的台词“一眼看透你的心事”。对于高级爬虫编写者来说(我不是),应该有相当的分析页面代码的能力,从中找出有用的线索。
当然,爬取动态加载页面还有其它的方法,selenium。它能够搭配虚拟的浏览器phantomjs,还可以搭配自己已有的浏览器如firefox,google。 selenium和浏览器结合,将python爬虫模仿成一个真正的浏览器,所有的一切都与你手动访问没有什么不同,所以只要你爬取的信息是显示在网页上的,那么,这个组合也能将信息加载到虚拟的浏览器上。提取信息的方式有很多种,selenium支持xpath,css等等。不需要分析加载的页面,是它的优势。但是它操纵的是真正的浏览器,往往在某些时候需要延时等待网页的渲染。所以使用它的时候是比较费时的。
对于个人爬虫的技术路线: reuqests + xpath/正则/beautifulsoup requests + selenium + 浏览器 这两种方式能够解决绝大多数的问题。
对于大型爬虫,python提供了一个非常经典的框架,scrapy。 在安装scrapy的时候,用pip安装往往会出错,提示依赖库没有安装好,这时候请自行到官网下载,本地安装。 scrapy是一个成熟的爬虫框架,如果不熟悉的话,那么我将它比作java的类。它的每一个模块都是一个类,比如获取新的url,爬取信息等等。在创建一个项目后,只需要在相应的文档中填入少量的代码,依葫芦画瓢,就能创建一个大型的爬虫。
个人经验: 1,添加请求头,cookie等头文件 2,解析方法混合使用效率更高 3,适当的延时,防止被网站判断为爬虫 4,编码 5,个人爬虫尽量加入历史机制 6,注意起始页面和终止页面 7,新的url获取的方式:拼接和下一页看情况
Twitter
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email