现在已经可以修改headers和data,那么网站登陆可能需要cookies或者proxy,这又该如何解决?
cookies
Cookies 的处理就需要 Cookies 相关的 Handler 了。
import http.cookiejar, urllib.request
cookies = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookies)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookies:
print(item.name+ "=" + item.value)
运行结果如下:
BAIDUID=80AABDE88B6B2E4E664C9A0C364A5A39:FG=1
BIDUPSID=80AABDE88B6B2E4E664C9A0C364A5A39
H_PS_PSSID=1449_21125_28328_28413
PSTM=1549343922
delPer=0
BDSVRTM=0
BD_HOME=0
这样就可以简单的获得网页的url了
proxy
在做爬虫的时候免不了要使用代理,如果要添加代理,可以这样做:
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener
proxy_handler = ProxyHandler({
'http': 'http://127.0.0.1:1080',
'https': 'https://127.0.0.1:1080'
})
opener = build_opener(proxy_handler)
response = opener.open('http://httpbin.org/get')
print(response.read().decode('utf-8'))
在此本地搭建了一个代理,运行在1080端口上。
在这里使用了ProxyHandler,ProxyHandler的参数是一个字典,键名是协议类型,比如HTTP还是HTTPS等,键值是代理链接,可以添加多个代理。
然后利用 build_opener()方法利用这个Handler构造一个Opener,然后发送请求即可。