Python 无法正确捕获所需的文本
我是新手,我试图用python编写一个spider,但我无法得到我需要的部分,我不知道哪里出了问题。 我从整个html文件中选择我需要的部分,如下所示。我试图使用RegExPython 无法正确捕获所需的文本,python,regex,beautifulsoup,Python,Regex,Beautifulsoup,我是新手,我试图用python编写一个spider,但我无法得到我需要的部分,我不知道哪里出了问题。 我从整个html文件中选择我需要的部分,如下所示。我试图使用RegEx(.*),但什么也没有得到。有人能帮我解决这个问题吗 另外,在使用findall收集信息之前,我已经使用sub删除了所有\n和\r 提前谢谢 </tr> <tr > <td style="border-bottom:3px solid #000000;" colspan='4' rows
(.*)
,但什么也没有得到。有人能帮我解决这个问题吗
另外,在使用findall收集信息之前,我已经使用sub删除了所有\n
和\r
提前谢谢
</tr>
<tr >
<td style="border-bottom:3px solid #000000;" colspan='4' rowspan='1' >
<!-- START OBJECT-CELL -->
<table bgcolor='#C0C0C0' cellspacing='0' border='0' width='100%'>
<col align='left' />
<col align='right' />
<tr>
<td align='left' bgcolor='#C0C0C0'><font color='#000000'>AE1PGA/L1/01</font></td>
<td align='right' bgcolor='#C0C0C0'><font color='#000000'>3-4</font></td>
</tr>
</table>
<table bgcolor='#C0C0C0' cellspacing='0' border='0' width='100%'>
<col align='center' />
<tr>
<td align='center' bgcolor='#C0C0C0'><font color='#000000'>Programming And Algorithms</font></td>
</tr>
</table>
<table bgcolor='#C0C0C0' cellspacing='0' border='0' width='100%'>
<col align='left' />
<tr>
<td align='left' bgcolor='#C0C0C0'><font color='#000000'></font></td>
</tr>
</table>
<!-- END OBJECT-CELL -->
</td>
<td style="border-bottom:3px solid #000000;" colspan='4' rowspan='1' >
<!-- START OBJECT-CELL -->
<table bgcolor='#C0C0C0' cellspacing='0' border='0' width='100%'>
<col align='left' />
<col align='right' />
<tr>
<td align='left' bgcolor='#C0C0C0'><font color='#000000'>AE1MCS/L1/01</font></td>
<td align='right' bgcolor='#C0C0C0'><font color='#000000'>3-5, 7-15</font></td>
</tr>
</table>
<table bgcolor='#C0C0C0' cellspacing='0' border='0' width='100%'>
<col align='center' />
<tr>
<td align='center' bgcolor='#C0C0C0'><font color='#000000'>Mathematics For Computer Scientists</font></td>
</tr>
</table>
<table bgcolor='#C0C0C0' cellspacing='0' border='0' width='100%'>
<col align='left' />
<tr>
<td align='left' bgcolor='#C0C0C0'><font color='#000000'>SEB-432+</font></td>
</tr>
</table>
<!-- END OBJECT-CELL -->
</td>
</tr>
<tr >
AE1PGA/L1/01
3-4
程序设计与算法
AE1MCS/L1/01
3-5, 7-15
计算机科学家的数学
SEB-432+
正则表达式与显示的数据不匹配有几个原因
- 您在几个地方有
,您的意思是/s
\s
- 在这两种情况下,您要求closin
紧跟在开口
之前,没有中间空间 - 您在
中使用的点与换行符不匹配,除非您设置*?
选项标志DOTALL
- 您要求三个连续的
元素,这些元素没有出现在您的数据中
[\s]
放在括号中,但这不会影响模式的行为
修好这些,你就可以
</tr\s*?>\s*(<tr\s*?>.*?</tr\s*?>)\s*<tr\s*?>
\s*(.*)\s*
如果HTML中有类似的内容,并且设置了DOTALL
选项标志,则匹配
但是,正如其他人所指出的,正则表达式不是处理HTML的正确工具。您应该使用适当的解析器如果您将发布的HTML复制到名为
HTML
的字符串中,以下脚本将向您展示BeautifulSoup如何帮助您提取所有…
块:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
for table in soup.find_all('table'):
for tr in table.find_all('tr'):
print tr
print '-' * 30
这将显示以下输出:
<tr>
<td align="left" bgcolor="#C0C0C0"><font color="#000000">AE1PGA/L1/01</font></td>
<td align="right" bgcolor="#C0C0C0"><font color="#000000">3-4</font></td>
</tr>
------------------------------
<tr>
<td align="center" bgcolor="#C0C0C0"><font color="#000000">Programming And Algorithms</font></td>
</tr>
------------------------------
<tr>
<td align="left" bgcolor="#C0C0C0"><font color="#000000"></font></td>
</tr>
------------------------------
<tr>
<td align="left" bgcolor="#C0C0C0"><font color="#000000">AE1MCS/L1/01</font></td>
<td align="right" bgcolor="#C0C0C0"><font color="#000000">3-5, 7-15</font></td>
</tr>
------------------------------
<tr>
<td align="center" bgcolor="#C0C0C0"><font color="#000000">Mathematics For Computer Scientists</font></td>
</tr>
------------------------------
<tr>
<td align="left" bgcolor="#C0C0C0"><font color="#000000">SEB-432+</font></td>
</tr>
------------------------------
AE1PGA/L1/01
3-4
------------------------------
程序设计与算法
------------------------------
------------------------------
AE1MCS/L1/01
3-5, 7-15
------------------------------
计算机科学家的数学
------------------------------
SEB-432+
------------------------------
注意,第一个
不会显示,因为您发布的HTML不包含它所属的表。Argh不要自己解析HTML,为此使用一个库:beautifulsoup4:(特别是regex是一个不适合此工作的工具)@RvdK我尝试过bs4,但它也不能正常工作,所以我必须自己去做。bs4对你来说不正常吗?你到底想从这个HTML中提取什么?您的预期输出是什么?如果您使用类似于soup.find_all('tr')
的东西,可能会出现这种情况,但是在bs4中过滤这些
要比使用regexThanks一百万容易得多,这非常有帮助。