为什么python会用中文显示我的文字?

Che*_*ara 3 python web-scraping

我正在使用请求和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
Run Code Online (Sandbox Code Playgroud)

而且我这样做,唯一的问题是文本是中文的,但是当我查看页面源时它是英文的.为什么我会用中文而不是英文.如何解决?

n1c*_*1c9 11

该网站似乎检查GET请求Accept-Language参数.如果请求没有,则显示中文版.但是,这是一个简单的修复 - 请求文档中描述的使用标头:

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
Run Code Online (Sandbox Code Playgroud)

生产:

Anti-Mage
Axe
Bane
Bloodseeker
Crystal Maiden
Drow Ranger
...
Run Code Online (Sandbox Code Playgroud)

等等

通常,当您的浏览器和请求内容中的请求显示不同时,它与您正在使用的请求和标头类型有关.我希望我之前已经意识到的一个非常有用的网页抓取技巧是,如果你去Chrome或Firefox上的网络标签,你可以获得许多可用于调试的有用信息:

在此输入图像描述