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中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
python 中random模块的常用方法总结
Jul 08 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
Python随机函数random()使用方法小结
Apr 29 Python
Python装饰器知识点补充
May 28 Python
python实现简单名片管理系统
Nov 30 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
python plotly画柱状图代码实例
Dec 13 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
七个非常实用的Python工具包总结
Jun 15 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传输数据的代码
2007/11/13 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python字典排序的方法
2019/10/12 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
医学生自我评价
2014/01/27 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
活动总结报告格式
2014/05/09 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
婚宴父亲致辞
2015/07/27 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python