0

我正在尝试使用正则表达式来解析网站

blahblahblah 
<a  href="THIS IS WHAT I WANT" title="NOT THIS">I DONT CARE ABOUT THIS EITHER</a>
blahblahblah 

(其中有很多,我希望它们都以某种标记化的形式出现)。问题是“a href”实际上有两个空格,而不仅仅是一个(有些是“a href”,有一个我不想检索的空格),所以使用 LXML 被证明是一件很痛苦的事,我不想使用 BeautifulSoup(出于其他原因)。有谁知道我该怎么做?

谢谢!

4

3 回答 3

0

根据您想要的稳健性级别,您可以在第一次拍摄中获取标签并将其存储,然后在您的字符串包含“”时将“”替换为“”。这将有效地删除字符串中的任何多个空格。

需要注意的是,不推荐使用正则表达式来解析 HTML =)

于 2013-02-15T03:54:08.700 回答
0

每次有人问与您相同的问题时,不要让您对链接给出的答案印象深刻。它显然被认为是被很多人半自动引用的教理问答页面。然而,在编程中,就像在日常生活中一样,有教理问答,还有我们在现实生活中所做的事情。
就个人而言,如果我不认为 HTML 可以完全用正则表达式解析,我认为可以用正则表达式完成对 HTML 某些部分的有限分析。这是务实的观点。
而且我确实使用正则表达式实现了对网页的此类分析。有时会出现一些问题,但它们可以由开发人员管理。正则表达式很快。有一次我测量到 Beautiful Soup 比正则表达式慢 10 倍,而且lxml慢了大约 50 倍。
我相对熟练地使用正则表达式获取网络数据,如果您想获得提示,我可以提供一些提示,我的电子邮件在我的页面上。

于 2013-02-15T04:31:15.807 回答
-1

我相信这回答了你的问题。这只是几个正则表达式,它们将获得所有在开始的“a”标记后正好两个空格的href。

fh = open("index.html", 'r')
rawString = fh.read()   # read entire file to string
fh.close()

temp =  re.findall("<a  href=\".*?\"", rawString) 
if temp:
    for i in range(len(temp)): # process each match
        temp[i] = re.search("\".*?\"", temp[i]).group(0) # remove 'href='
    print temp    
else:
    print "Not found"

对于您的示例,输出为:

['“这就是我要的”']

于 2013-02-15T03:59:20.743 回答