我正在try 捕捉我发送到许多网站的请求是否已被重定向.首先,让我给你一些例子数据.
redirected_urls = [
"http://www.tagesschau.de/inland/vw-schalte-hapke-101.html",
"http://de.reuters.com/article/deutschland-volkswagen-idDEKCN10V0H3"
]
healthy_urls = [
"http://www.focus.de/finanzen/news/wirtschaftsticker/machtkampf-zwischen-vw-und-zulieferern-stoppt-autoproduktion_id_5842241.html",
"https://www.bild.de/news/aktuelles/news/vw-kuendigt-harte-gangart-gegen-lieferstopp-47400500.bild.html"
]
redirected_df = pd.DataFrame({'URL': redirected_urls})
healthy_df = pd.DataFrame({'URL': healthy_urls})
因此,在REDIRECTED_DF中是实际被重定向的链接,但是其他数据帧不会被重定向.正如在这个post中提到的,我try 设置allow_redirects=False
,然后意识到我正在使用的所有链接都以某种方式被重定向,尽管我可以看到实际的新闻文章.因此,所有的响应代码都是200,表示连接成功.然后我判断了response.history
中几乎所有的链接,我得到了[<Response [301]>]
.使用BeautifulSoup(response._content).find('link', {'rel': 'canonical'})
,它们都有价值.
然后我想把这个信息保存在我的数据框中,就像这个_df.at[k,'Is_Redirected']= 1 if response.history else 0
.对于上面提到的所有链接,我得到1(True).
我使用的代码:
def send_two_requests(_url):
try:
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36"}
response = requests.get(_url,headers=headers,allow_redirects=True, timeout=10)
return response
except:
return func_timeout.func_timeout(timeout=5, func=send_request, args=[_url])
for k,link in enumerate(_df['url']):
response = send_two_requests(_df.at[k,'url'])
if response is not None:
_df.at[k,'Is_Redirected']= 1 if response.history else 0
有没有什么我可以区分的实际链接的工作,和那些得到重定向?