404通过Python"请求"发出HTTP请求时的状态代码图书馆。但是页面在浏览器中加载正常

时间:2018-01-06 06:49:53

标签: python python-3.x web-scraping python-requests

我正在尝试网络废弃一些网站的内容。但我注意到,对于某些网站,我收到状态代码为200的响应。但是,对于其他一些网站,我收到了404响应状态代码。但是当我在浏览器中打开这些网站(返回404)时,它正好适合我。我在这里错过了什么?

例如:

import requests

url_1 = "https://www.transfermarkt.com/jumplist/startseite/wettbewerb/GB1"
url_2 = "https://stackoverflow.com/questions/36516183/what-should-i-use-instead-of-urlopen-in-urllib3"

page_t = requests.get(url_2)
print(page_t.status_code)      #Getting a Not Found page and  404 status

page = requests.get(url_1)
print(page.status_code)       #Getting a Valid HTML page and 200 status

3 个答案:

答案 0 :(得分:6)

您提到的网站正在检查请求标题中的"User-Agent"。您可以通过在"User-Agent"来电中通过dict requests.get(..)对象来假冒请求中的>>> import requests >>> url = "https://www.transfermarkt.com/jumplist/startseite/wettbewerb/GB1" >>> headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'} # Make request with "User-Agent" Header >>> response = requests.get(url, headers=headers) >>> response.status_code 200 # success response >>> response.text # will return the website content 。它会让它看起来像是来自实际的浏览器而且您会收到回复。

例如:

styles

答案 1 :(得分:3)

有些网站不允许抓取。所以你需要提供一个标题,用户代理指定浏览器类型,系统说它是浏览器请求,而不是一些代码试图抓取

在你的代码中使用它

 (new self)->checkId($course_id);

看看这是否有帮助

答案 2 :(得分:1)

正如@csabinho所说,该网站可能正在检查它是否是真实的(人类)请求。所以你需要添加标题来向网站显示它不是python脚本。

hdr = {'User-Agent': 'Mozilla/5.0'}
page_t = requests.get(url_t, headers=hdr)
print(page_t.status_code)
# got 200 code for this