网络爬虫

现在有一个例子,下载一个网站上所有gif格式的图片。那么Python代码如下:

import re
import urllib

def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

def getImg(html):
    reg = r'src="(.*?\.gif)"'
    imgre = re.compile(reg)
    imgList = re.findall(imgre,html)
    print imgList
    cnt = 1
    for imgurl in imgList:
        urllib.urlretrieve(imgurl,'%s.jpg' %cnt)
        cnt += 1

if __name__ == '__main__':
    html = getHtml('http://www.baidu.com')
    getImg(html)

根据上面的方法,我们可以抓取一定的网页,然后提取我们所需要的数据。


实际上,我们利用urllib这个模块来做网络爬虫效率是极其低下的,下面我们来介绍Tornado Web Server。

Tornado web server是使用Python编写出来的一个极轻量级、高可伸缩性和非阻塞IO的Web服务器软件,著名的Friendfeed网站就是使用它搭建的。Tornado跟其他主流的Web服务器框架(主要是Python框架)不同是采用epoll非阻塞IO,响应快速,可处理数千并发连接,特别适用用于实时的Web服务。


用Tornado Web Server来抓取网页效率会比较高。

从Tornado的官网来看,还要安装backports.ssl_match_hostname,官网如下:

http://www.tornadoweb.org/en/stable/


import tornado.httpclient

def Fetch(url):
    http_header = {'User-Agent' : 'Chrome'}
    http_request = tornado.httpclient.HTTPRequest(url=url,method='GET',headers=http_header,connect_timeout=200,request_timeout=600)
    print 'Hello'
    http_client = tornado.httpclient.HTTPClient()
    print 'Hello World'

    print 'Start downloading data...'
    http_response = http_client.fetch(http_request)
    print 'Finish downloading data...'

    print http_response.code

    all_fields = http_response.headers.get_all()
    for field in all_fields:
        print field

    print http_response.body

if __name__ == '__main__':
    Fetch('http://www.baidu.com')

—————————————————————————————————

本文原创自Sliencecsdn技术博客。

本博客所有原创文章请以链接形式注明出处。

欢迎关注本技术博客,本博客的文章会不定期更新。


大多数人想要改造这个世界,但却罕有人想改造自己。

世上没有绝望的处境,只有对处境绝望的人。

                                              ————By slience

—————————————————————————————————


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值