python爬虫学习6
-
urllib.request.urlopen
import urllib.request
url = 'http://www.httpbin.org/get'
res = urllib.request.urlopen(url,timeout=0.1)
print(res.read())
运行结果:在请求超时后,则不再等待,直接抛出一个异常 -
Request # 前面介绍的URLopen方法,它能发起最基本的请求。但是这个方法中的几个简单的参数不足以构建一个完整的请求。如果需要在请求中加入 Headers 等信息,那么我们就需要使用功能更加强大的Request类。
import urllib.request
url = 'https://www.baidu.com/'
req = urllib.request.Request(url)
resp = urllib.request.urlopen(req)
print(resp.read().decode('utf-8'))
运行结果:
-
参数
- url 用于请求url,这是必传参数,相对应的其他参数都是可选参数。
- data 如果要传数据,必须传bytes类型的。如果是一个字典就要用到之前的方法进行编码。
- headers 是一个字典,这就是请求头。在构造请求头时,既可以通过headers参数直接构造,也可以通过调用add_header 添加。
- origin_req_host 请求方的host名称或者IP地址。
- unverifiable 表示请求是否是无法验证的,默认值是False,意思是用户没有足够权限来接受这个请求的结果。例如:请求一个HTML文档中的图片,但是没有自动抓取图像的权限,这是unverifiable的值就是 True。
- method 是一个字符串。用来指示使用请求的方法,例如Get,Post,Put。
-
传入多参数构件Request import urllib.request,urllib.parse
url = 'http://www.httpbin.org/post'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
,'host' : 'www.httpbin.org'
}
data = {'name': 'germey'}
data_bytes = bytes(urllib.parse.urlencode(data),encoding='utf-8')
req = urllib.request.Request(url,data=data_bytes,headers=headers,method='POST')
resp = urllib.request.urlopen(req)
print(resp.read().decode('utf-8'))
运行结果: -
使用 IP 代理
from urllib.request import build_opener
from urllib.request import ProxyHandler
proxy = ProxyHandler({'https': 'https://127.0.0.1:8080'})
opener = build_opener(proxy)
url = 'https://www.baidu.com/'
resp = opener.open(url)
print(resp.read().decode('utf-8'))
如果IP可以使用的话就会出现正常的结果
今日完毕,未完待续。。。
|