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对两个有序列表进行合并和排序的例子
Jun 13 Python
jupyter安装小结
Mar 13 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
python微信公众号开发简单流程
Mar 23 Python
python 杀死自身进程的实现方法
Jul 01 Python
Django如何将URL映射到视图
Jul 29 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
pytorch实现线性拟合方式
Jan 15 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 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生成百度sitemap站点地图类函数实例
2014/10/17 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
更优雅的事件触发兼容
2011/10/24 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
Python多线程编程(一):threading模块综述
2015/04/05 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
python入门教程之识别验证码
2017/03/04 Python
Python实现的选择排序算法示例
2017/11/29 Python
python skimage 连通性区域检测方法
2018/06/21 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
毕业生求职简历的自我评价
2013/10/23 职场文书
自荐信结尾
2013/10/27 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
小学新学期教师寄语
2014/01/18 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
详解redis在微服务领域的贡献
2021/10/16 Redis