Python爬虫学习--urllib库

注:python 3.x中urllib库和urilib2库合并成了urllib库

urllib2.urlopen()变成了request.urlopen()
urllib2.Request()变成了request.Request()
  • 导入库

from urllib import request
  • 爬取网页获取内容

response = request.urlopen('http://www.baidu.com')
print(response.read())

首先我们调用的是urllib2库里面的urlopen方法,传入一个URL,urlopen一般接受三个参数,它的参数如下:

request.urlopen(url,data,timeout)

第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。(url参数必选)

read()  

read()方法返回获取到的网页内容

  • Request

re = request.Request('http://www.baidu.com')
response = request.urlopen(re)
print(response.read())

运行结果和上面完全一样的,只不过中间多了一个Request对象,推荐大家这么写,因为在构建请求时还需要加入好多内容,通过构建一个Request,服务器响应请求得到应答,这样显得逻辑上清晰明确。

  • 带参数的数据请求

from urllib import parse   // 导入模块

values = {'username':"wu",'password':'******'}
data = parse.urlencode(values)
print(data)
re = request.Request('http://www.baidu.com',data=data)
response = request.urlopen(re)
print(response.read())
  • 设置Headers

有些网站直接用上面的方式进行访问会失败,我们模拟浏览器的工作,所以应设置Headers属性。
打开浏览器,右击-检查-Network,重新刷新网页点击Name中第一个,展示出信息中最后User-Agent就是我们所要的headers信息。下面我们来设置Headers:

header = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
re = request.Request('http://www.baidu.com',headers=header)
response = request.urlopen(re)
print(response.read())
  • 设置代理和timeout

很多网站它会检测一段时间内某个IP 的访问次数,如果访问次数过多,它会禁止此IP访问,所以设置代理服务器来帮助工作,每隔一段时间换一个代理

proxy = request.ProxyHandler({'http':'http://www.xicidaili.com/wn/'})
opener = request.build_opener(proxy)
request.install_opener(opener)
re = request.Request('http://www.baidu.com',headers=header,timeout=10)
response = request.urlopen(re)
print(response.read())

你可能感兴趣的:(Python爬虫学习--urllib库)