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

时间:2016-10-07 18:52:51

标签: 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

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

2 个答案:

答案 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上的网络标签,你可以获得许多可用于调试的有用信息:

enter image description here

答案 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)