【Python爬虫学习笔记(1)】urllib2库相关知识点总结

1. urllib2的opener和handler概念

  1.1 Openers:

  当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。正常情况下,我们使用默认opener:通过urlopen。但你能够创建个性的openers。可以用build_opener来创建opener对象。一般可用于需要处理cookie或者不想进行redirection的应用场景(You will want to create openers if you want to fetch URLs with specific handlers installed, for example to get an opener that handles cookies, or to get an opener that does not handle redirections.)

  以下是用代理ip模拟登录时(需要处理cookie)使用handler和opener的具体流程。

1 self.proxy = urllib2.ProxyHandler({‘http‘: self.proxy_url})
2 self.cookie = cookielib.LWPCookieJar()
3 self.cookie_handler = urllib2.HTTPCookieProcessor(self.cookie)
4 self.opener = urllib2.build_opener(self.cookie_handler, self.proxy, urllib2.HTTPHandler)

  1.2 Handles:

  Openers使用处理器handlers,所有的“繁重”工作由handlers处理。每个handlers知道如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面。例如HTTP重定向或者HTTP cookies。

  更多关于Openers和Handlers的信息。http://www.voidspace.org.uk/python/articles/urllib2.shtml#openers-and-handlers

2. urllib2的使用技巧

  2.1 proxy代理ip创建opener

  Note:Currently urllib2 does not support fetching of https locations through a proxy. This can be a problem.http://www.voidspace.org.uk/python/articles/urllib2.shtml#proxies

1 import urllib2
2 proxy——handler = urllib2.ProxyHandler({‘http‘: ‘54.186.78.110:3128‘})#注意要确保该代理ip可用,示例中ip在美国
3 opener = urllib2.build_opener(proxy_handler)
4 request = urllib2.Request(url, post_data, login_headers)#该例中还需要提交post_data和header信息
5 response = opener.open(request)
6 print response.read().encode(‘utf-8‘)

  2.2 用timeout参数设置超时

1 import urllib2
2 response = urllib2.urlopen(‘http://www.google.com‘, timeout=10)

  2.3 伪装浏览器

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

  下例中提交了header中的User-Agent信息,由此伪装成浏览器发送请求。查看User-Agent信息非常方便,可以使用Chrome浏览器F12审查元素看network中的Request Header可见详细的Header信息。

  对付“反盗链”,有些网站会检查header中的Referer是不是该网站本身,可以设置header时进行设置。 

1 headers = {
2     ‘User-Agent‘: ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘,3     ‘referer‘: ‘https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fwww.taobao.com%2F‘
4 }
5 request = urllib2.Request(
6     url ="https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fwww.taobao.com%2F",
7     data = postdata,
8     headers = headers
9 )

  更多关于HTTP header的详细信息:http://rlog.cn/?p=521

  2.4 cookie的使用

  Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。

  cookie的一个使用示例如下。

 1 import urllib2
 2 import cookielib
 3 #声明一个CookieJar对象实例来保存cookie
 4 cookie = cookielib.CookieJar()
 5 #利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
 6 handler=urllib2.HTTPCookieProcessor(cookie)
 7 #通过handler来构建opener
 8 opener = urllib2.build_opener(handler)
 9 #此处的open方法同urllib2的urlopen方法,也可以传入request
10 response = opener.open(‘http://www.baidu.com‘)
11 for item in cookie:
12     print ‘Name = ‘+item.name
13     print ‘Value = ‘+item.value

  2.5 urllib2.urlopen的返回码

  在无异常抛出的情况下,可以用getcode()方法来得到状态码,所以需要异常处理。

 1 import urllib2
 2 try:
 3     request = urllib2.Request(url)
 4     response = urllib2.urlopen(request)
 5     print response.read().decode(‘utf-8‘)
 6 except urllib2.URLError, e:
 7     if hasattr(e, "code"):
 8         print e.code
 9     if hasattr(e, "reason"):
10         print e.reason    

  参考链接:

  http://blog.csdn.net/pleasecallmewhy/article/details/8925978

  

原文地址:http://www.cnblogs.com/wuwenyan/p/4749018.html

时间: 2024-10-12 04:08:43

【Python爬虫学习笔记(1)】urllib2库相关知识点总结的相关文章

Python爬虫学习笔记(一)

1.urllib2简介 urllib2的是爬取URL(统一资源定位器)的Python模块.它提供了一个非常简单的接口,使用urlopen函数.它能够使用多种不同的协议来爬取URL.它还提供了一个稍微复杂的接口,用于处理常见的情况 - 如基本身份验证,cookies,代理等. 2.抓取URLs 使用urlib2的简单方式可以像下面一样: import urllib2 response = urllib2.urlopen('http://python.org/') html = response.r

5.Python爬虫入门三之Urllib2库的基本使用

1.分分钟爬一个网页下来 怎么爬网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是他的衣服.所以最重要部分是存在于HTML中的,下面我们就写个例子来扒一个网页下来. import urllib2 response=urllib2.urlopen('https://www.baidu.com/') print

【Python爬虫学习笔记(2)】Beautiful Soup库相关知识点总结

1. Beautiful Soup简介     Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减少爬虫程序的运行时间.     Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码.你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了.然后,你仅仅需要说明一下原始编码方式就可以了.     B

【Python爬虫学习笔记(3)】正则表达式(re模块)相关知识点总结

1. 正则表达式     正则表达式是可以匹配文本片段的模式. 1.1 通配符     正则表达式能够匹配对于一个的字符串,可以使用特殊字符创建这类模式.(图片来自cnblogs) 1.2 特殊字符的转义     由于在正则表达式中,有时需要将特殊字符作为普通字符处理,就需要用'\'进行转义,例如'python\\.org'就会匹配'python.org',那么为什么要用两个反斜杠呢,原因在于需要进行两层转义,首先是re模块表示正则表达式中需要转义一次,其次是python解释器即python的语

python 爬虫学习笔记1

经过一段时间的学习,终于入了门 先爬一个csdn 的blog练练手 整体思路是首先判断某个blog有多少页 然后根据页数 去获得相应的url 再爬出每一页的title和对应的url 这里使用了BeautifulSoup来解析页面 #coding=utf-8 import urllib2 from bs4 import BeautifulSoup import sys reload(sys) sys.setdefaultencoding('utf-8') def query_item(input,

Python爬虫学习笔记1

加入实验室,要写爬虫,以前写过java的,新学python练练手 首先是发包程序,框架如下: 首先是POST方式,代码如下: 1 import urllib 2 import urllib2 3 url='http://someserver.com/cgi-bin/register.cgi' 4 user_agent='Mozilla/4.0' 5 values={ 6 'name':'Liuyuqing', 7 'location':'DUT', 8 'language':'python' 9

Python爬虫学习笔记——豆瓣登陆(一)

#-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import html5lib import re import urllib url1 = 'http://accounts.douban.com/login' url2 = 'http://www.douban.com/people/*****/contacts' formdata={ "redir":"http://www.douban

python 爬虫学习笔记2

接着上一篇笔记 这次将该blog的所有文章都下载下来 思路为根据dict中的url去解析网页 并将其中的博文部分获取并下载下来 #coding=utf-8 import urllib2 import urllib from bs4 import BeautifulSoup import sys reload(sys) sys.setdefaultencoding('utf-8') def query_item(input,tag=None,cla=None): ''' 获取对应url中 div标

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb