原标题:Python爬虫技术路线?
对于初学者而言,Python爬虫的技术路线应该怎么取舍?
首先展示一下如何用python爬虫requests库进行爬取,requests库是python爬虫最基础也必须掌握的库。Requests库教程:1、Requests库速成教程;2、Requests全面教程。
>>> import requests
>>> r = requests.get( "https://sand-box.cn" )
>>> print r.text
r.text就是url返回的html代码结果。Requests库的好处就是API设计的很人性化;用起来很舒服。
Requests库只能返回某个url返回的代码,但html代码中的js脚本的运行结果,Requests库则无法获取,若想获取已经加载过的网页中的信息,这时你需要的是Selenium,通过python调用Webdriver的模式来让一个Chrome浏览器或Firefox浏览器或其他浏览器听从你代码的指挥来构建一些程序,比如完成加载多少秒后,提取有哪里的代码……
Python Selenium 英文教程
Python Selenium 中文教程
如果是要构建一个大规模的爬虫系统,python中比较有名的爬虫框架是scrapy,但是尝试了一下没有选择用scrapy,因为我认为学习成本,还不如自己裸写,而且裸写出来的框架灵活度、自由度都更高,注意关注一下:多线程爬虫、多进程爬虫、异步爬虫(协程)的区别;如果对性能没有到苛刻级别的要求,建议使用多进程爬虫或异步爬虫;自己裸写爬虫框架还要注意“容错机制”。
总之,构建大规模的爬虫系统,个人并不提倡使用第三方框架,推荐裸写。
html源码的解析,其实这不属于爬虫范围,但是一般做爬虫都会遇到html源码解析,所以html解析就成了爬虫必修的一部分,BeautifulSoup则是html解析领域最有名的python库之一;很多年前,MIT一个做数字设计的老师去叫他的学生们学python,让设计学的研究生先学urllib,再用BeautifulSoup去解析提取数据进行大数据分析,我认为这位MIT的老师水平并不怎样,首先他要求了一群零编程基础的学生去做这些事情,其实有必要吗?难道拽一点爬虫技术与数据分析能力这就很有价值吗?其实重点是:1、他推荐零基础的研究生去用urllib,而不是用Requests
2、他推荐零基础的研究生去用BeautifulSoup去提取数据,而不是让这群初学者用最基础的字符串操作来提取数据。
所以,如果你是初学者,在HTML解析这件事,我认为你可以放弃BeautifulSoup,用手动的方式去提取吧。如果你是多年经验的大神,HTML解析这件事,也可以考虑放弃BeautifulSoup,BeautifulSoup并不适合大规模爬虫系统的HTML解析问题,容错问题、内存溢出问题很明显。之前Debug了半天才发现内存溢出的元凶是BeautifulSoup,性能极差。BeautifulSoup确实是个优秀的Python库,但是这得取决你用他的场景。
之后,会开源一个我之前做HTML解析时而设计的库;到时再来补充。