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 相关文章推荐
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
Python实现全排列的打印
Aug 18 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
如何使用python进行pdf文件分割
Nov 11 Python
Django中的AutoField字段使用
May 18 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
python flask开发的简单基金查询工具
Jun 02 Python
python for循环赋值问题
Jun 03 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
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
JS实现手风琴特效
2020/11/08 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
Python采集腾讯新闻实例
2014/07/10 Python
python中的lambda表达式用法详解
2016/06/22 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
python re模块的高级用法详解
2018/06/06 Python
深入理解Python异常处理的哲学
2019/02/01 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
python编写俄罗斯方块
2020/03/13 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
华为C++笔试题
2014/08/05 面试题
什么是反射
2012/03/17 面试题
党支部承诺书范文
2014/03/28 职场文书
销售员态度差检讨书
2014/10/26 职场文书
实习科室评语
2015/01/04 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers