详解Python网络爬虫功能的基本写法
网络爬虫,即WebSpider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。
1.网络爬虫的定义
网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。这样看来,网络爬虫就是一个爬行程序,一个抓取网页的程序。网络爬虫的基本操作是抓取网页。
2.浏览网页的过程
抓取网页的过程其实和读者平时使用IE浏览器浏览网页的道理是一样的。比如说你在浏览器的地址栏中输入 www.baidu.com 这个地址。
打开网页的过程其实就是浏览器作为一个浏览的“客户端”,向服务器端发送了一次请求,把服务器端的文件“抓”到本地,再进行解释、展现。
HTML是一种标记语言,用标签标记内容并加以解析和区分。浏览器的功能是将获取到的HTML代码进行解析,然后将原始的代码转变成我们直接看到的网站页面。
3.基于python实现的网络爬虫功能
1).python获取html页面
其实,最基本的抓站,两句话就可以了:
importurllib2 content=urllib2.urlopen('http://XXXX').read()
这样可以得到整个html文档,关键的问题是我们可能需要从这个文档中获取我们需要的有用信息,而不是整个文档。这就需要解析充满了各种标签的html。
2).python爬虫抓取页面后解析html方法
python爬虫html解析库SGMLParser
Python默认自带HTMLParser以及SGMLParser等等解析器,前者实在是太难用了,我就用SGMLParser写了一个示例程序:
importurllib2 fromsgmllibimportSGMLParser classListName(SGMLParser): def__init__(self): SGMLParser.__init__(self) self.is_h4="" self.name=[] defstart_h4(self,attrs): self.is_h4=1 defend_h4(self): self.is_h4="" defhandle_data(self,text): ifself.is_h4==1: self.name.append(text) content=urllib2.urlopen('http://169it.com/xxx.htm').read() listname=ListName() listname.feed(content) foriteminlistname.name: printitem.decode('gbk').encode('utf8')
很简单,这里定义了一个叫做ListName的类,继承SGMLParser里面的方法。使用一个变量is_h4做标记判定html文件中的h4标签,如果遇到h4标签,则将标签内的内容加入到List变量name中。解释一下start_h4()和end_h4()函数,他们原型是SGMLParser中的
start_tagname(self,attrs) end_tagname(self)
tagname就是标签名称,比如当遇到<pre>,就会调用start_pre,遇到</pre>,就会调用end_pre。attrs为标签的参数,以[(attribute,value),(attribute,value),...]的形式传回。
python爬虫html解析库pyQuery
pyQuery是jQuery在python中的实现,能够以jQuery的语法来操作解析HTML文档,十分方便。使用前需要安装,easy_installpyquery即可,或者Ubuntu下
sudoapt-getinstallpython-pyquery
以下例子:
frompyqueryimportPyQueryaspyq doc=pyq(url=r'http://169it.com/xxx.html') cts=doc('.market-cat') foriincts: print'====',pyq(i).find('h4').text(),'====' forjinpyq(i).find('.sub'): printpyq(j).text(), print'\n'
python爬虫html解析库BeautifulSoup
有个头痛的问题是,大部分的网页都没有完全遵照标准来写,各种莫名其妙的错误令人想要找出那个写网页的人痛打一顿。为了解决这个问题,我们可以选择著名的BeautifulSoup来解析html文档,它具有很好的容错能力。
以上就是本文的全部内容,对Python网络爬虫功能的实现进行了详细的分析介绍,希望对大家的学习有所帮助。