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学习教程之使用py2exe打包
Sep 24 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
Python基于pyjnius库实现访问java类
Jul 31 Python
python中pop()函数的语法与实例
Dec 01 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
德生PL660的电路分析和打磨
2021/03/02 无线电
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
JS 常用校验函数
2009/03/26 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
python如何实现反向迭代
2018/03/20 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
运动会100米解说词
2014/01/23 职场文书
社会调查研究计划书
2014/05/01 职场文书
股票投资建议书
2014/05/19 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
面试感谢信范文
2015/01/22 职场文书
陕西导游词
2015/02/04 职场文书
文言文辞职信
2015/02/28 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL