从简单的get

时间:2018-03-28 19:49:20

标签: python python-2.7 web-scraping python-requests

我试图从网页上获取一些数据,但它会返回错误[ 403 Forbidden ]。

我认为是用户代理,但我尝试了多个用户代理,但仍然会返回错误。

我也尝试使用库fake user-agent,但我没有成功。

with requests.Session() as c:
        url = '...'
        #headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36'}
        ua = UserAgent()
        header = {'User-Agent':str(ua.chrome)}
        page = c.get(url, headers=header)
        print page.content

当我手动访问页面时,一切正常。

我使用的是python 2.7.14和requests library,不知道吗?

2 个答案:

答案 0 :(得分:3)

该网站可能正在使用请求中的任何内容来触发拒绝。

因此,请复制浏览器发出的请求中的所有标头。然后逐个删除它们以找出哪些是必要的。

根据Python requests. 403 Forbidden,要为请求添加自定义标头,请执行以下操作:

result = requests.get(url, headers={'header':'value', <etc>})

答案 1 :(得分:1)

我可以看到浏览器包含的通用GET请求的所有标头:

Host: <URL>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1

尝试在请求中逐步包含所有这些(1乘1),以便确定成功请求所需的那些。

另一方面,请查看Cookies选项下浏览器控制台/开发人员工具中提供的标签Security和/或Network