我正在尝试使用Python 3中的re模块从HTML文档中提取一些数据。
我下载了此网址的源HTML:http://diablo2.diablowiki.net/Rune_list并将文件重命名为div
。
我想要的是id="mw-content-text"
块import re
file=open('rune_list.html','r')
data=file.read()
file.close()
pat=re.compile(r'<div id="mw-content-text"[\s\S]*</div>')
found=re.search(pat,data)
,
所以我写了这段代码:
</div>
而且......没有找到。我知道也许正则表达式不是那么好,因为据我所知,*的存在可能包括其他div
,使得匹配的字符串成为<div id="mw-
s的一大块。
但为什么它找不到任何东西?
我尝试了一个与我写的文件相同的模式,一个长字符串
以“</div>
...”开头并以“mw-content-text
”结尾,其中包含一些随机表格,以模仿我想要查找的内容:在这种情况下,找到匹配的字符串。正则表达式虽然写得不好,但也应该对原作有效。我知道这些行存在于文档中。
所以我尝试在原始文档上进行更简单的搜索:首先我搜索"mw-content-text"
,没有双引号,并找到匹配的字符串。
然后我尝试<div id="mw-
,双引号,没有找到任何东西。它没有找到更大的模式,因为它找不到这个。
令人困惑的是,如果我在源页面中手动搜索BeautifulSoup
...(通过浏览器上的“查看页面源”打开),元素就在那里。除此之外,我已经用正则表达式进行了一些搜索在具有类似代码的其他HTML文档上,它可以工作(有点)。我知道(并且使用了一些)这个问题的其他解决方案(例如print
),但我想尝试使用正则表达式作为练习。
我错过了什么?