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利用smtplib实现QQ邮箱发送邮件
May 20 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
对python 多个分隔符split 的实例详解
Dec 20 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 Python
pytorch自定义初始化权重的方法
Aug 17 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
Python操作注册表详细步骤介绍
Feb 05 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python多进程使用函数封装实例
May 02 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python访问hdfs的操作
Jun 06 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
PHP安装攻略:常见问题解答(一)
2006/10/09 PHP
第七节--类的静态成员
2006/11/16 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
Python实现简单的语音识别系统
2017/12/13 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
利用Python如何生成便签图片详解
2018/07/09 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
基于python中theano库的线性回归
2018/08/31 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
团拜会策划方案
2014/06/07 职场文书
企业文化标语口号
2014/06/09 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
支行行长竞聘报告
2014/11/06 职场文书
初二英语教学反思
2016/02/15 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL
SQL Server中锁的用法
2022/05/20 SQL Server