python 网络爬虫初级实现代码


Posted in Python onFebruary 27, 2016

首先,我们来看一个Python抓取网页的库:urllib或urllib2。

那么urllib与urllib2有什么区别呢?
可以把urllib2当作urllib的扩增,比较明显的优势是urllib2.urlopen()可以接受Request对象作为参数,从而可以控制HTTP Request的header部。
做HTTP Request时应当尽量使用urllib2库,但是urllib.urlretrieve()函数以及urllib.quote等一系列quote和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助。

urllib.open()这里传入的参数要遵循一些协议,比如http,ftp,file等。例如:

urllib.open('http://www.baidu.com')
urllib.open('file:D\Python\Hello.py')

现在有一个例子,下载一个网站上所有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')

urllib2的常见方法:

(1)info() 获取网页的Header信息

(2)getcode() 获取网页的状态码

(3)geturl() 获取传入的网址

(4)read() 读取文件的内容

Python 相关文章推荐
python实现随机密码字典生成器示例
Apr 09 Python
跟老齐学Python之Python文档
Oct 10 Python
Python实现计算最小编辑距离
Mar 17 Python
Python编码爬坑指南(必看)
Jun 10 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 Python
python实现不同数据库间数据同步功能
Feb 25 Python
Python数据库的连接实现方法与注意事项
Feb 27 #Python
学习python之编写简单简单连接数据库并执行查询操作
Feb 27 #Python
学习python之编写简单乘法口诀表实现代码
Feb 27 #Python
学习python 之编写简单乘法运算题
Feb 27 #Python
python学习之编写查询ip程序
Feb 27 #Python
用python写的一个wordpress的采集程序
Feb 27 #Python
python结合shell查询google关键词排名的实现代码
Feb 27 #Python
You might like
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP实现倒计时功能
2020/11/16 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
Javascript的闭包
2009/12/31 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
python fabric使用笔记
2015/05/09 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
财务部岗位职责
2013/11/19 职场文书
一年级班主任寄语
2014/01/19 职场文书
运动会跳远加油稿
2014/02/20 职场文书
计生专干事迹
2014/05/28 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
离婚协议书范文
2015/01/26 职场文书
承诺保证书格式
2015/02/28 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android