打印 html 文件,返回如下
觉得应该是用户并未登陆问题,应该是淘宝的反爬虫机制导致。
def getHTMLText(url): kv = { 'cookie': 'adsgadfafegadsgadsfaefasdfaewfadsfag' 'uaer-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' } try: r = requests.get(url, headers=kv, timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "gg"
还遇到了一种问题,就是在 url 为 http 时,即使添加了 cookie 和 user-agent 也无法获取信息。
猜测是因为重定向导致的问题。
首先简单介绍一下 requests 库的一个高级用法 Session 会话对象
会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。(参见 HTTP persistent connection).
这个问题经过观察发现,重定向之后 cookie 信息并没有被保存下来(返回的 html 还是让用户登陆),我们就需要用使用 Session 保存 cookie 信息。使用 Session 后,更新 cookie 并没有成功。
然后将矛头转向 cookie 去哪里了,发现问题是因为 requests 的 session 方法保持 cookie 只能保持 cookiejar 类型的 cookie,而我们手动构建的 cookie 是 dict 类型的,所以需要将 dict 转化为 cookiejar 类型。
查阅得方法如下:
#将CookieJar转为字典: cookies = requests.utils.dict_from_cookiejar(r.cookies) #将字典转为CookieJar: cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True) #其中cookie_dict是要转换字典 转换完之后就可以把它赋给cookies 并传入到session中了: s = requests.Session() s.cookies = cookies
具体代码很简单,如下:
cookie_dict = {'cookie': 'adgfadsgadsgasf'} cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True) S = requests.Session() S.cookies = cookies; try: r = S.get(url, headers=headers, timeout=30)