Python爬虫学习笔记

Python爬虫学习笔记

1.关于抛出异常重定位

raise TooManyRedirects(‘Exceeded {} redirects.’.format(self.max_redirects), response=resp)
requests.exceptions.TooManyRedirects: Exceeded 30 redirects.

原因:

urllib和requests发送的请求默认会根据响应的location进行重定向。

此时,Status Code是302,表示暂时请求的网页暂时跳转到其他页面;响应头中有location的参数

一般大多数的解决办法是,在请求地址时加上参数,禁止重定向,如:

html = requests.get(‘https://baike.baidu.com’, allow_redirects=False).text

实际多数时候并不返回结果。或者返回失败

根据网上查找的结果,参考以下文章

https://www.cnblogs.com/Jeffding/p/8391957.html
https://www.it1352.com/330504.html

简单来说就是没有与服务器建立会话,页面重定向成了环形的死循环。即你的原始URL重定向一个没有新​​的URL B,其重定向到C,它重定向到B,等​​等。

最终解决办法是在建立一个会话,提到加请求头来保持会话的持久性。如下:

s = requests.Session()
s.headers[‘User-Agent’] = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36’
r = s.get(url)
r

1.2 如果说是根据location来重新定位,将location的值设置为目标地址是不是能解决问题?
待验证。

2.form data和request payload的区别

用post发送请求时,开发工具下有时候看到是form data,有时候是request payload,原因是Content-Type类型不一样。

  • 如果请求的Content-Type设置为application/x-www-form-urlencoded,那么这个Post请求会被认为是Http Post表单请求,那么请求主体将以一个标准的键值对和&的querystring形式出现。这种方式是HTML表单的默认设置,所以在过去这种方式更加常见
  • 其他形式的POST请求,是放到 Request payload 中(现在是为了方便阅读,使用了Json这样的数据格式),请求的Content-Type设置为application/json;charset=UTF-8或者不指定。

对于request payload类型,data 是个字典,而payload接受json类型,因此需要将字符格式改成json格式。data = json.dumps(data)

具体可参考 https://blog.csdn.net/zwq912318834/article/details/79930423

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值