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中使用mongoengine操作MongoDB教程
Apr 24 Python
Django实现图片文字同时提交的方法
May 26 Python
Python对数据库操作
Mar 28 Python
使用python存储网页上的图片实例
May 22 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
python面向对象法实现图书管理系统
Apr 19 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
python 变量初始化空列表的例子
Nov 28 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
基于PyTorch中view的用法说明
Mar 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
解析数组非数字键名引号的必要性
2013/08/09 PHP
php实现无限级分类
2014/12/24 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python管理Windows服务小脚本
2018/03/12 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python对日志进行处理的实例代码
2018/10/06 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
python中_del_还原数据的方法
2020/12/09 Python
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
文员个人的求职信范文
2013/09/26 职场文书
标准导师推荐信(医学类)
2013/10/28 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
课程设计的心得体会
2014/09/03 职场文书
初中差生评语
2014/12/29 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python