2016-07-12 11 views
0

私は立ち往生しており、間違いを指摘する助けが必要です。 私は、テーブルを使用して行われ、多くの場所で同じクラスとIDを使用して行われるWebページからhtmlコードの一部を抽出しようとしています。したがって、私はBeautifulSoup4だけを使用して抽出することができません。私は抽出するために少し正規表現が必要になります。それだけで、私は正規表現から返された文字列に基づいて必要な情報を抽出するためにhtmlパーサーを使用する。しかし、この問題は、正規表現が中国語の文字の一部で動作しない場合に発生します。私はどこかでユニコードに文字列を変更する必要があることに関連して読んだことがありますが、それを自分で動作させることはできません。英語と中国語の混在のためのPython正規表現

import requests 
import bs4 
import re 

fetch = requests.get('http://www.check4d.com') 

mo = re.search(u'<td class="resultdamacailable">Da Ma Cai 1+3D 大馬彩(.+?)</table></div>' , fetch.text) 
matched = mo.group() 
print matched 

私が手にエラーが

トレースバック(最新の呼び出しの最後)である:: ファイル "C:\ Python27 \のcheck4d_r5_today.py"、ライン98、 にマッチしたとして、以下のコードの一部= mo.group() はAttributeError: 'NoneType' オブジェクトが属性 'グループ' HTMLコードの

部を有していない。

<div class="outerbox"><table class="resultTable" align="center"><tr><td colspan="5"><table class="resultTable2" cellpadding="0" cellspacing="0"><tr><td class="resultdamacailable" style="width:20%"><img src=""/></td><td class="resultdamacailable">Da Ma Cai 1+3D 大馬彩</td></tr></table></td></tr><tr><td colspan="5"><table class="resultTable2" cellpadding="0" cellspacing="5"><tr><td class="resultdrawdate">Date: 03-05-2016 (Tue)</td><td class="resultdrawdate">Draw No: 4359/16</td></tr></table></td></tr><tr><td colspan="5"><table class="resultTable2" cellpadding="0" cellspacing="0"><tr><td style="width:45%" class="resultprizelable">1st Prize 首獎</td><td class="resulttop">1002</td></tr><tr><td style="width:45%" class="resultprizelable">2nd Prize 二獎</td><td class="resulttop">3605</td></tr><tr><td style="width:45%" class="resultprizelable">3rd Prize 三獎</td><td class="resulttop">0010</td></tr></table></td></tr><tr><td colspan="5" class="resultprizelable">Special 特別獎</td></tr><tr><td class="resultbottom">8079</td><td class="resultbottom">2293</td><td class="resultbottom">1891</td><td class="resultbottom">7657</td><td class="resultbottom">5781</td></tr><tr><td class="resultbottom">4989</td><td class="resultbottom">4586</td><td class="resultbottom">6868</td><td class="resultbottom">3129</td><td class="resultbottom">3635</td></tr><tr><td class="resultbottom" colspan="5">&nbsp;</td></tr><tr><td colspan="5" class="resultprizelable">Consolation 安慰獎</td></tr><tr><td class="resultbottom">0901</td><td class="resultbottom">8750</td><td class="resultbottom">0152</td><td class="resultbottom">2929</td><td class="resultbottom">4220</td></tr><tr><td class="resultbottom">6213</td><td class="resultbottom">5185</td><td class="resultbottom">8283</td><td class="resultbottom">9864</td><td class="resultbottom">3029</td></tr></table></div> 

私はそれを削除した後、それがOKを返すように、それは中国の文字と関係がある必要がありますと思う。しかし、漢字を残すことは、私が望まないマッチを返すでしょう。

+0

私はPython 2.7(あなたのディレクトリ名に基づいていると仮定しています)は、ネイティブ/透過的にユニコードを完全にサポートしているとは思いません。これはdocsでこれを読んで、Python 2と3を比較するのに役立ちます:https://docs.python.org/2/howto/unicode.html https://docs.python.org/3/howto/unicode .html、特に正規表現に関する部分:https://docs.python.org/3/howto/unicode.html#unicode-regular-expressions –

答えて

1

これは私の提案です。

import urllib.request 
from bs4 import BeautifulSoup 

url = urllib.request.urlopen('http://www.check4d.com') 
html = str(url.read()).encode('cp437', 'ignore') #ignores chinese characters in page 
soup = BeautifulSoup(html, 'html.parser') 
content = soup.findAll("div", { "class" : "outerbox" },recursive=True) 

#Da Ma Cai Data is stored in content[3] 
関連する問題