-1

我有这个 HTML:

<li class="news_list_bo"><a href="/news_view.php?article_id=2752">URLHunter 프로그램 버퍼오버플로우 취약점 발견!</a>
<ul class="new_liview">
    <li class="img"><a href="/news_view.php?article_id=2752"><img height="45" width="65" src="/image_article/458226972502b655fa1b7b.jpg" /></a></li>                         
    <li class="text"><a href="/news_view.php?article_id=2752">웹페이지를 구성하는 그림파일, 플래쉬파일, 미디어파일들과 같은 구성요소를 사용자에게 보여주는 URLHunter 프로그램에서 버퍼오...</a></li>
</ul>

我正在尝试检索a标签中的文本,如下所示:

>>> tmp_title = re.findall(r'<a href="/news_view.php?article_id=[0-9]+">(.*?)</a>',tmp_str,re.I|re.DOTALL)'

但是,它什么也没找到:

>>> print tmp_title
[]

我怎样才能找到和之间的<li class="text"><a href="/news_view.php?article_id=2752">文字</a></li>

4

1 回答 1

2

我建议使用像Beautiful Soup这样的 HTML 解析器来处理大部分问题,而不是试图让正则表达式来处理所有这些问题。不过,一旦 HTML 被解析,正则表达式可能有助于匹配 URL。

我们可以先构造一个正则表达式来匹配您想要的 URL。您的问题是它?在正则表达式中具有特殊含义。如果您需要从字面上匹配 a ?,则需要对其进行转义。无论如何,这是一个用于匹配所需 URL 的正则表达式:

^/news_view\.php\?article_id=[0-9]+$

当需要查找字符串时,可以先将 HTML 解析成汤:

soup = bs4.BeautifulSoup(html)

请参阅文档中关于SoupStrainers提高性能的部分。

然后您可以将所有a标签与href您感兴趣的标签匹配:

links = soup.find_all('a', href=NEWS_URL_RE)

然后您可以从链接中获取所有文本:

link_texts = [link.get_text() for link in links]
于 2012-08-20T02:04:15.403 回答