用于混合英文和中文字符的Python正则表达式无法返回匹配

时间:2016-07-12 07:41:34

标签: python raspberry-pi

我陷入困境,在指出错误时需要一些帮助。 我试图从网页中提取部分html代码,这是使用表格完成的,并且在很多地方使用相同的类和ID。因此,我无法仅使用BeautifulSoup4来提取它。我需要一些正则表达式来提取。只有这样才能使用html解析器根据regex返回的字符串提取我需要的信息。但是当正则表达式无法使用某些汉字时会出现问题。我已经阅读了某个地方,它需要将字符串更改为unicode才能工作,但是无法让它自己工作。部分代码如下:

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

我得到的错误是

追踪(最近一次通话):   文件&#34; C:\ Python27 \ check4d_r5_today.py&#34;,第98行,在     matched = mo.group() AttributeError:&#39; NoneType&#39;对象没有属性&#39; group&#39;

部分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。但是留下中文字符会返回我不想要的匹配。

1 个答案:

答案 0 :(得分: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]
相关问题