我正在尝试网络废弃一些网站的内容。但我注意到,对于某些网站,我收到状态代码为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
答案 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