我正在使用请求和bs4从中文网站获取一些英文版本的数据。我写这篇文章是为了获得正确的数据:
import requests
from bs4 import BeautifulSoup
page = requests.get('http://dotamax.com/hero/rate/')
soup = BeautifulSoup(page.content, "lxml")
for i in soup.find_all('span'):
print i.text
而我这样做,唯一的问题是文本是中文的,但是当我查看页面源时它是英文的。为什么我会用中文而不是英文。如何解决?
答案 0 :(得分:11)
该网站似乎检查了Accept-Language
参数的GET请求。如果请求没有,则显示中文版。但是,这是一个简单的修复 - 使用headers,如请求文档中所述:
import requests
from bs4 import BeautifulSoup
headers = {'Accept-Language': 'en-US,en;q=0.8'}
page = requests.get('http://dotamax.com/hero/rate/', headers=headers)
soup = BeautifulSoup(page.content, "lxml")
for i in soup.find_all('span'):
print i.text
产生
Anti-Mage
Axe
Bane
Bloodseeker
Crystal Maiden
Drow Ranger
...
等
通常,当您的浏览器和请求内容中的请求显示不同时,它与您正在使用的请求和标头类型有关。我希望我之前已经意识到的一个非常有用的网页抓取技巧是,如果你去Chrome或Firefox上的网络标签,你可以获得许多可用于调试的有用信息:
答案 1 :(得分:-1)
你必须在http标题中告诉服务器你喜欢哪种语言:
import requests
from bs4 import BeautifulSoup
header={
'Accept-Language': 'en-US'
}
page = requests.get('http://dotamax.com/hero/rate/',headers=header)
soup = BeautifulSoup(page.content, "html5lib")
for i in soup.find_all('span'):
print(i.text)