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写的服务监控程序实例
Jan 31 Python
浅谈python对象数据的读写权限
Sep 12 Python
Python对List中的元素排序的方法
Apr 01 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
Python实现微信小程序支付功能
Jul 25 Python
使用python实现kNN分类算法
Oct 16 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
python-视频分帧&多帧合成视频实例
Dec 10 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 Python
浅谈Python 参数与变量
Jun 20 Python
django和flask哪个值得研究学习
Jul 31 Python
Python 列表反转显示的四种方法
Nov 16 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
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
python的多重继承的理解
2017/08/06 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Pandas中resample方法详解
2019/07/02 Python
django使用xadmin的全局配置详解
2019/11/15 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
小组口号大全
2014/06/09 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
人事局接收函
2015/01/30 职场文书
初中物理教学反思
2016/02/19 职场文书
导游词之山东孔庙
2019/11/04 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
python关于集合的知识案例详解
2021/05/30 Python