Python编写简单的网络爬虫
根据网络上给出的例子,简单总结一下用Python编写网络爬虫程序的基本思路,以百度为例,主要有以下策略:Python提供了许多Module,通过这些Module,可以很简单的做一些
工作。比如,要获得NBA这个词在百度搜索结果页中各个搜索结果对应的URL,这就是一个很简单的爬虫需求。
1、通过urllib2这个Module获得对应的HTML源码。
# -*- encoding: utf-8 -*- import urllib2 url='http://www.baidu.com/s?wd=NBA' content=urllib2.urlopen(url).read() print content
通过上面这三句就可以将URL的源码存在content变量中,其类型为字符型。
2、接下来是要从这堆HTML源码中提取我们需要的内容。用Chrome查看一下对应的内容的代码(也可以用Firefox的Firebug)。
可以看到url存储在<h3 class="t">标签中,要获取其中的信息可以用正则式。
re.compile是将字符串编译为用于python正则式的模式,字符前的r表示是纯字符,这样就不需要对元字符进行两次转义。re.findall返回的是字符串中符合正则表达式的列表。site依次输出我们所要获取的网络地址。这里需要强调的是需要编写正确的正则表达式才能获取到我们想要的结果,这里的代码可能还不够精确。
import re urls_pat=re.compile(r'<h3 class="t">(.*?)</h3>') siteUrls=re.findall(r'href="(.*?)" target="_blank">',content) for site in siteUrls: print site
3、对所得结果进行处理:比如进一步获取有用的信息或将信息进行存储;再比如运用相关的数据结构进行大规模网络爬虫,或者分布式的网络爬虫设计。
当然网络爬虫原理是很简单,但是需要大规模处理网络资源的时候就会遇到各种各样的问题,需要做各种各样的优化处理工作,这里简单介绍一下,希望对“聚焦网络爬虫”有所了解。