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 07 Python
Python多线程实现同步的四种方式
May 02 Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 Python
python-opencv 将连续图片写成视频格式的方法
Jan 08 Python
解决pycharm工程启动卡住没反应的问题
Jan 19 Python
python使用requests模块实现爬取电影天堂最新电影信息
Apr 03 Python
python下载库的步骤方法
Oct 12 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
Oct 14 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 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 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
Python文件的读写和异常代码示例
2017/10/31 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
施工资料员的岗位职责
2013/12/22 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
合伙经营协议书
2014/04/18 职场文书
领导班子对照检查材料
2014/09/22 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
会计求职自荐信范文
2015/03/04 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技
js作用域及作用域链工作引擎
2022/07/07 Javascript