你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 网络与通信
多线程文章抓取工具的实现(三)
 

2.页面抓取

想要抓取一个页面,调用代码如下:

 

text = tools.get_url(url, proxy)

 

需要传入一个URL地址和代理服务器信息。具体的处理代码是在plugins/tools.py文件中。

 

def get_url(url, proxy=None):

    c = pycurl.Curl()

    c.setopt(pycurl.URL, url)

    import StringIO

    b = StringIO.StringIO()

    c.setopt(pycurl.WRITEFUNCTION, b.write)

    c.setopt(pycurl.FOLLOWLOCATION, 1)

    c.setopt(pycurl.MAXREDIRS, 5)

    c.setopt(pycurl.CONNECTTIMEOUT, 30)

    c.setopt(pycurl.TIMEOUT, 300)

    if not proxy:

        proxy_host = urllib.getproxies().get('http', '')

        if proxy_host:

            proxy = {'host':proxy_host}

    if proxy:

        c.setopt(pycurl.PROXY, proxy['host'])

        if proxy.get('user', ''):

            c.setopt(pycurl.PROXYUSERPWD, '%s:%s' % (proxy['user'], proxy['password']))

    c.perform()

return b.getvalue()

 

这里使用了pycurl库,因为它是cURL(http://curl.haxx.se/)库的一个Python封装。而cURL是使用C语言编写的,运行稳定,速度快,功能强。上述代码可以完成对某个地址的页面抓取,同时支持代理服务器的设置,成功后将返回抓取后的HTML页面内容。

3. 网站定制

因为每个网站的目录代码和内容代码不完全相同,因此需要能够根据网站进行定制。本工具提供了相应的扩展框架。

首先是定义统一的调用接口,则每个定制模块需要提供3个函数:

 

parse_title(text, proxy=None)

parse_index(text, proxy=None)

parse_page(title, text, proxy=None)

 

它们将对传入的页面文本进行分析,分别得到标题、目录和正文。其中前两个将对目录页面进行分析,最后一个将对正文页面进行分析。

然后是对定制模块进行配置。

plugins/__init__.py中,对支持的网站地址与模块名进行了配置,如:

 

#coding=utf-8

modname = {

'book.sina.com.cn':('booksina',

'新浪读书', 'http://book.sina.com.cn'),

    'cmfu.com':('cmfu', '起点中文网', 'http://www.cmfu.com'),

}

def get_mod(domain):

    return modname.get(domain, (None, None, None))[0]

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089