欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫学习--urllib库

程序员文章站 2022-05-03 20:03:51
...

注: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())