python 网络爬虫初级实现代码
作者:ACdreamers 发布时间:2021-10-02 12:24:13
首先,我们来看一个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的官网来看,还要安 * ackports.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() 读取文件的内容


猜你喜欢
- 本文实例为大家分享了readAsDataUrl方法预览图片的具体代码,供大家参考,具体内容如下<html> <head&
- 代码很简洁,也很简单,就不多废话了。/** * 去除多余的0 */ function del0($s)&
- this指针是面向对象程序设计中的一项重要概念,它表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。和其他
- 使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出
- 目录一、两个模块二、SMTP端口三、四大步骤1、构造邮件内容2、连接邮件服务器3、登陆邮件服务器4、发送邮件四、常用场景1、纯文本邮件2、发
- 问题描述:高版本sql备份在低版本sql还原问题(出现媒体簇的结构不正确)分析原因:sql版本兼容问题,sql server兼容级别是用作向
- 本文实例讲述了Python PyQt5实现的简易计算器功能。分享给大家供大家参考,具体如下:这里剩下计算函数(self.calculator
- 仿google的asp分页代码index.asp(文件1)<%@LANGUAGE="VBSCRIPT" CODEP
- ASP具备动态输出任一Office应用程序文件格式的功能。在开始编写代码之前,我们首先需要做的就是设置正确的文件类型,因为浏览器需要知道如何
- python中调用字典中key的方法:使用list()方法将字典中的keys转化为列表,然后通过列表索引值值即可调用指定的key。# -*-
- 本文实例讲述了python使用 cx_Oracle 模块进行查询操作。分享给大家供大家参考,具体如下:# !/usr/bin/env pyt
- 一、什么是数据库事务数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执
- 小毅的blog:http://andymao.com/前天网上有个朋友发给我一个页面让我帮她看一下为什么鼠标翻转实现不了。我打开源文件看了一
- 我们知道**代表次方。如下>>>12 * 12144>>>12 ** 2144>>>a
- 本文实例讲述了python通过函数属性实现全局变量的方法。分享给大家供大家参考。具体分析如下:python的函数可以定义属性,而且是全局的,
- 需求小编通常会上一些专业的视频网站比如腾讯视频、优酷,在上面看电影、电视剧。这些网站有个优点,可以缓存视频,在通勤路上比如地铁就可以愉快的刷
- 我们在建立一个大型网站的时候,往往会包括很多相同的页面框架模式,甚至一些细节元素都是相同的。但令人困扰
- python五子棋原创算法,供大家参考,具体内容如下我们都见过五子棋,但是在我看来五子棋单机游戏中,逻辑赢法很重要,经常用到的算法是五子连珠
- 如何复制一个对象不考虑IDE提供的代码分析和go vet之类的静态分析工具,golang里几乎所有的类型都能被复制。// 基本标量类型和指针
- 本篇文章博主将带大家一起学习MySQL中常用的数据查询语言。DQL(Data Query Language 数据查询语言)SELECT 语法