Python请求不重定向
我正在尝试抓取单词定义,但无法让 python 重定向到正确的页面。例如,我试图获得“agenesia”这个词的定义。当您在浏览器中使用https://www.lexico.com/definition/agenesia加载该页面时,加载的页面是https://www.lexico.com/definition/agenesis,但在 Python 中该页面不会重定向并给出 200 状态码
URL = 'https://www.lexico.com/definition/agenesia'
page = requests.head(URL, allow_redirects=True)
这就是我目前检索页面内容的方式,我也尝试过使用,requests.get
但这也不起作用
编辑:因为不清楚,我知道我可以在 URL 中将单词更改为“agenesis”以获得正确的页面,但我正在抓取单词列表并且宁愿自动跟随 URL 而不是搜索首先在浏览器中手动重定向。
编辑 2:我意识到用我的其余代码检查解决方案可能更容易,到目前为止,这适用于agenesis但不适用agenesia:
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.find("span", {"class": "ind"}).get_text(), 'n')
print(soup.find("span", {"class": "pos"}).get_text())
回答
前面提到的其他答案不会使您的请求重定向。原因是您没有使用正确的请求标头。试试下面的代码:
import requests
from bs4 import BeautifulSoup
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
}
page = requests.get('https://www.lexico.com/definition/agenesia', headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
print(page.url)
print(soup.find("span", {"class": "ind"}).get_text(), 'n')
print(soup.find("span", {"class": "pos"}).get_text())
并打印:
https://www.lexico.com/definition/agenesis?s=t
Failure of development, or incomplete development, of a part of the body.
noun