python爬虫实践之网页抓取

标签: python 爬虫 实践 | 发表时间:2014-01-12 08:04 | 作者:figo829
出处:http://blog.csdn.net
python自带了urllib和urllib2模块,以及第三方的requests库来抓取网页,这里我们使用easy_install包管理工具下载requests库,BeautifulSoup库,在CMD命令行下,切换到easy_install的目录,运行命令easy_install 包名称。

easy_install requests

安装好requests包之后,我们就可以选择使用urllib,urllib2或requests库来抓取网页了

1.网页内容的抓取

#! /usr/bin/env python
#coding:utf-8
import urllib
import urllib2
import requests
import sys

url = 'http://www.csdn.net'

def urllib2Test():
	req = urllib2.Request(url)
	response = urllib2.urlopen(req)
	thePage = response.read()

def requestsTest():
	r = requests.get(url)
	r.status_code
	r.content
	r.headers

def urllib2TestEx(url):
	req = urllib2.Request(url)
	try:
		response = urllib2.urlopen(req)
		content = response.read()
	except urllib2.URLError,e:
		print e.reason

def urlhttperror(url):
	req = urllib2.Request(url)
	try:urllib2.urlopen(req)

	except urllib2.HTTPError,e:
		print e.read()


if __name__ == '__main__':
	urllib2Test()
	requestsTest()
	urllib2TestEx(url)
	urlhttperror(url)


2.爬虫伪装成浏览器的访问

在访问一些网站时,会出现HTTPError: HTTP Error 403: Forbidden这样的异常,这是由于现在有些网站禁止爬虫访问,爬虫会带来服务器上的负担,爬虫和浏览器发出的http请求区别在于:当用户发送一个http请求的时候,浏览的的版本信息也包含在了http请求信息中,而爬虫就不包含头信息,当服务器端收到一个页面访问请求时,如果不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息,这些信息在HTTP协议的中的一个字段User-agent中,缺失这些信息,服务器会认为这些请求是非正常的访问,我们用Fiddler工具就可以看到浏览器的请求的信息. 


对于禁止爬虫的网站,可以伪装成浏览器访问,在请求中加入UserAgent的信息。
添加和修改
headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
req = urllib2.Request("http://blog.csdn.net/nevasun", headers=headers)

伪装成浏览器访问如下
#! /usr/bin/env python
#coding:utf-8

import requests
from BeautifulSoup import BeautifulSoup
from os.path import dirname, abspath
import sys
import os

#PREFIX = dirname(abspath(__file__))

## 这段代码是用于解决中文报错的问题  
reload(sys)  
sys.setdefaultencoding("utf8")  
##################################################### 



defaultWaitTime = 1

def getHtmlContent(url):
	global defaultWaitTime
	content = None
	retry = 0
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36'}
	AccessFrequency = defaultWaitTime
	while retry < 5:
		try:
			r = requests.get(url,timeout=10,headers=headers)
			content = r.content
			return content
		except:
			retry+=1
			time.sleep(AccessFrequency)
	return content
def Test():
	content = getHtmlContent("http://blog.csdn.net/figo829/article/details/18015537")
#	print content

if __name__ == '__main__':
	Test()



作者:figo829 发表于2014-1-12 0:04:32 原文链接
阅读:0 评论:0 查看评论

相关 [python 爬虫 实践] 推荐:

python爬虫实践之网页抓取

- - CSDN博客推荐文章
python自带了urllib和urllib2模块,以及第三方的requests库来抓取网页,这里我们使用easy_install包管理工具下载requests库,BeautifulSoup库,在CMD命令行下,切换到easy_install的目录,运行命令easy_install 包名称. 安装好requests包之后,我们就可以选择使用urllib,urllib2或requests库来抓取网页了.

最全Python爬虫总结

- - CSDN博客综合推荐文章
最近总是要爬取一些东西,索性就把Python爬虫的相关内容都总结起来了,自己多动手还是好. (2)保存爬取的图片/视频和文件和网页. (7)某个网站的站内所有目录爬虫. (9)爬虫框架Scrapy   . 二,保存爬取的图片/视频和文件和网页. #图片/视频和文件和网页的地址抓取下来后,利用模块urllib里的urlretrieve()方法下载下来:.

Python写爬虫与网页解析

- - 互联网实践
Python写个简单爬虫,并作网页解析,还是非常高效的. urllib2是urllib得增强版,httplib更为底层,可以理解为urllib是对httplib的抽象. httplib是一个相对底层的http请求模块,其上有专门的包装模块,如urllib内建模块,goto等第三方模块,但是封装的越高就越不灵活,比如urllib模块里请求错误时就不会返回结果页的内容,只有头信息,对于某些需要检测错误请求返回值的场景就不适用,所以就得用这个模块了.

开源Python网络爬虫框架Scrapy

- - 互联网实践
所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说法不够专业,更专业的描述就是,抓取特定网站网页的HTML数据. 不过由于一个网站的网页很多,而我们又不可能事先知道所有网页的URL地址,所以,如何保证我们抓取到了网站的所有HTML页面就是一个有待考究的问题了. 一般的方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样.

[原][python]书籍信息爬虫示例

- - moxiaomomo的专栏
[python]书籍信息爬虫示例. 需要收集一些书籍信息,以豆瓣书籍条目作为源,得到一些有效书籍信息,并保存到本地数据库. 具体可参考这个链接:. 然后将这些分类标签链接存到本地某个文件,存储内容如下. 获取书籍信息,并保存本地数据库. 假设已经建好mysql表,如下:. 并已实现相关爬虫逻辑,主要用到了BeautifulSoup包,如下:.

Python最佳编码实践

- - CSDN博客推荐文章
有时候,甚至优秀的程序员在他们首次尝试用Python时,会很少使用最佳方案和数据结构. 在过去数年中,Python也逐渐累积了一些诸如:冗余,缺点等瑕疵(它们中的一部分会从Python3.0中移除,这篇文章主要基于Python 2.5,不针对之后的版本,比如说Python 2.6,同样不针对Jython 或 PyPy 或 IronPython 它们之间有点微妙的差异),但是总而言之,Python依然是非常干净、简洁的语言,本文也像这样,目的是为了让你避免程序开发实践中最可能碰到的误区.

基于 Python 的 Scrapy 爬虫入门:代码详解

- - SegmentFault 最新的文章
接下来创建一个爬虫项目,以 图虫网 为例抓取里面的图片. 在顶部菜单“发现” “标签”里面是对各种图片的分类,点击一个标签,比如“美女”,网页的链接为: https://tuchong.com/tags/美女/,我们以此作为爬虫入口,分析一下该页面:. 打开页面后出现一个个的图集,点击图集可全屏浏览图片,向下滚动页面会出现更多的图集,没有页码翻页的设置.

[python爬虫] Selenium常见元素定位方法和操作的学习介绍

- - CSDN博客编程语言推荐文章
        这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法、鼠标操作、键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~.         前文目录:.          [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上).

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

- - CSDN博客推荐文章
前一篇文章" [python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID、用户名、微博数、粉丝数、关注数等. 微博信息:包括转发或原创、点赞数、转发数、评论数、发布时间、微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩:.

Python项目自动化部署最佳实践@搜狐

- - the5fire的技术博客
今天主要介绍下我们组刚刚开源出来的一个自动化部署的工具 essay ,功能在readme上已经介绍的很详细了,这篇文章只是介绍下外围的情况,产生的环境,一些决策的考虑. 事情还得从头开始说起,从那些自动化的fabric文件开始,也从我刚入职搜狐负责手机搜狐开发开始说起. 我参与开发的时候项目的部署已经是自动化了,不过并没有抽象出一个工具来.