2017-06-10 53 views
0

我想從中國的網絡爬蟲一個列表,我的計劃是:網址與非英文字符

import pandas as pd 
states = pd.read_html('http://baike.baidu.com/item/天津/132308',encoding='utf-8') 
print(states[0]) 

,因爲有非英文單詞「天津」,存在一些誤區:

Traceback (most recent call last): 
    File "/Users/biyuntian/Documents/nihao.py", line 2, in <module> 
    fiddy_states = pd.read_html('http://baike.baidu.com/item/天津/132308',encoding='utf-8') 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/io/html.py", line 906, in read_html 
    keep_default_na=keep_default_na) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/io/html.py", line 743, in _parse 
    raise_with_traceback(retained) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/compat/__init__.py", line 344, in raise_with_traceback 
    raise exc.with_traceback(traceback) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128) 

如何解決這個問題? 順便說一下,我使用python 3在MacBook Air上

+0

您是否嘗試過除ASCII之外的其他編碼? –

+0

雖然語言可能是英文,但字符是拉丁文。 –

回答

3

試圖通過與其他工具獲得原始的HTML像requests

import pandas as pd 
import requests 

response = requests.get('http://baike.baidu.com/item/天津/132308') 
content = response.content 
states = pd.read_html(content, 
         encoding='utf-8') 
print(states[0]) 

給我們

 0   1  2    3 
0 區劃名稱  面積 郵政編碼   政府駐地 
1 和平區 10平方千米 300041  小白樓街道曲阜道81號 
2 河東區 39平方千米 300171 上杭路街道泰興南路32號 
3 河西區 37平方千米 300202  大營門街道紹興道4號 
4 南開區 39平方千米 300100  長虹街道黃河道390號 
5 河北區 27平方千米 300143 望海樓街道獅子林大街284號 
6 紅橋區 21平方千米 300131 西於莊街道勤儉道202號 
7 濱海新區 2270平方千米 300457 塘沽街道新港二號路35號 
8 東麗區 460平方千米 300300  張貴莊街道躍進路38號 
9 西青區 545平方千米 300380  楊柳青鎮府前街2號 
10 津南區 401平方千米 300350  鹹水沽鎮津沽路186號 
11 北辰區 478平方千米 300400 果園新村街道北辰道389號 
12 武清區 1570平方千米 301700 運河西街道雍陽西道118號 
13 寶坻區 1523平方千米 301800  寶平街道建設路116號 
14 寧河區 1414平方千米 301500  蘆臺鎮光明路76號 
15 靜海區 1476平方千米 301600  靜海鎮迎賓大道99號 
16 薊州區 1593平方千米 301900  文昌街道府前街2號 

編輯

如果你不想使用第三方requests庫,我們可以使用標準libra的函數quote ry的urllib.parse包可以轉義非ASCII字符,如

from urllib.parse import quote 

import pandas as pd 

states = pd.read_html(quote('http://baike.baidu.com/item/天津/132308', safe=':/'), 
         encoding='utf-8') 
print(states[0]) 
+0

謝謝,它的工作 – andy

+0

@andy:如果它按預期工作,您可以[接受答案](https://stackoverflow.com/help/someone-answers) –