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网络编程之读取网站根目录实例
Sep 30 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
深入分析python数据挖掘 Json结构分析
Apr 21 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
python实现猜数字游戏
Mar 25 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
python return逻辑判断表达式实现解析
Dec 02 Python
pytorch实现查看当前学习率
Jun 24 Python
Python extract及contains方法代码实例
Sep 11 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
python manim实现排序算法动画示例
Aug 14 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
php5.2时间相差8小时
2007/01/15 PHP
php xml-rpc远程调用
2008/12/19 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
动手学习无线电
2021/03/10 无线电
基于jquery的气泡提示效果
2010/05/31 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
Javascript缓存API
2016/06/14 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
Python采集腾讯新闻实例
2014/07/10 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
python中wx模块的具体使用方法
2020/05/15 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
迎新晚会邀请函
2014/02/01 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
经理岗位职责
2015/02/02 职场文书
贷款担保书范本
2015/09/22 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书