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

2024-04-25 21:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我被困住了,需要一些帮助来指出错误。 我试图从网页中提取一部分html代码,这是使用表完成的,并且在许多地方具有相同的类和id。因此我不能只用BeautifulSoup4来提取它。我需要一点正则表达式来提取。只有这样,才能使用html解析器根据regex返回的字符串提取所需的信息。但当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

我得到的错误是

回溯(最近一次呼叫): 文件“C:\Python27\check4d\u r5_今天.py“,第98行,in 匹配=mo.组() AttributeError:“NoneType”对象没有“group”属性

部分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。但留下汉字将返回我不想要的匹配。你知道吗


Tags: 代码importdivstylehtmltablewidthtr
1条回答
网友
1楼 · 发布于 2024-04-25 21:33:38

这是我的建议。你知道吗

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]

相关问题 更多 >