2015-02-09 60 views
0

我试图使用requests库构建python爬虫。当我使用get方法检索结果如下:THá» THAO。但是当我使用curl时,我得到了THỂ THAO,这是我的预期结果。这里是我的代码:Python - 使用curl和请求库时检索到不同结果

def get_raw_channel(): 
    r = requests.get('http://vtv.vn/') 
    raw_html = r.text 
    soup = BeautifulSoup(raw_html) 
    o_tags = soup.find_all("option") 
    for o_tag in o_tags: 
     print o_tag.text 
     # raw_channel = RawChannel(o_tag.text.strip(), o_tag['value']) 
     # channels_file.write(raw_channel.__str__() + '\n') 

这里是我的卷曲CMD:curl http://vtv.vn/

问:为什么结果不同呢?我如何使用requests实现curl的结果?

+0

什么是响应体的编码? – 2015-02-09 08:17:05

+0

@LutzHorn '(Date:Mon,09 Feb 2015 07:59:34 GMT,Content-Type:text/html,Transfer-Encoding:chunked,Connection:close,Vary:Accept-Encoding,Server:vtv-rp' 这是curl响应头。和: '{'via':'1.1 TMG','proxy-connection':'Keep-Alive','transfer-encoding':'chunk ed','vary':' Accept-Encoding','server':'vtv-rp','connection':'Keep-Alive', 'date':'Mon,09 Feb 2015 08:19:52 GMT','content-type': 'text/html'}'是请求响应头。 – 2015-02-09 08:20:25

+0

@LutzHorn我没有看到响应的编码,但我认为它是'utf-8' – 2015-02-09 08:22:28

回答

1

我想你的代码,并在我的情况的编码是“ISO-8859-1”,尝试的过程之前,您的数据编码成UTF-8它BS,是这样的:

... 
raw_html = r.text.encode("utf-8") 
soup = BeautifulSoup(raw_html) 
... 

UPDATE : 我做了一些测试,貌似一切工作适合我,因为我明确地设置编码的要求,看看

In [1]: import requests 
In [2]: from BeautifulSoup import BeautifulSoup 
In [3]: r = requests.get('http://vtv.vn/') 
In [4]: r.encoding = "utf-8" 
In [5]: raw_html = r.text 
In [6]: soup = BeautifulSoup(raw_html) 
In [7]: soup.findAll("option") 
Out[7]: 
[<option value="1"> 
VTV1</option>, 
... stripped out some output ... 

VTVCab3 - Thể thao TV</option>, 
<option value="13"> 

... stripped out some output ... 
] 
+0

感谢您的回答,但它不适用于我:( – 2015-02-09 09:07:38

+0

哇!工作,非常感谢你。 – 2015-02-09 09:39:46