新版python中,urllib和urllib2合并了,统一为urllib
(1)简单爬取网页
import urllib
content = urllib.request.urlopen(req).read().decode("utf-8")
(2)添加header
import urllib
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0')
req.add_header('Referer', 'http://www.***.com')
my_page = urllib.request.urlopen(req).read().decode("utf-8")
(3)设置cookie
import urllib
import http.cookiejar
cj = http.cookiejar.LWPCookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
FAQ:
1.请求url中有中文,报异常
解决办法:将中文部分使用urllib.parse.quote处理
关于urllib.parse.quote:
屏蔽特殊的字符、比如如果url里面的空格!url里面是不允许出现空格的。
在 Python2.x 中的用法是:
urllib.quote(text)
Python3.x 中是
urllib.parse.quote(text)
按照标准,URL只允许一部分ASCII字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。
所以URL中使用其他字符就需要进行URL编码。
URL中传参数的部分(query String),格式是:
name1=value1&name2=value2&name3=value3
假如你的name或者value值中有『&』或者『=』等符号,就当然会有问题。所以URL中的参数字符串也需要把『&=』等符号进行编码。
URL编码的方式是把需要编码的字符转化为 %xx 的形式。通常URL编码是基于UTF-8的(当然这和浏览器平台有关)。
2.网页解析异常
解决办法:urllib.request.urlopen(url).read().decode("utf-8", 'ignore'),忽略掉异常字符
有用链接:
http://blog.csdn.net/pi9nc/article/details/9734437
http://www.pythonclub.org/python-network-application/observer-spider