从特定标签中提取URL的Python方法

2 投票
3 回答
3409 浏览
提问于 2025-04-16 18:59

大家好。

我有一个很大的HTML文件,里面有这样的标签:

<h3 class="r">
<a href="http://en.wikipedia.org/wiki/Digital_Signature_Algorithm" class=l onmousedown="return clk(this.href,'','','','6','','0CDEQFjACOAM')">

我需要用Python从这个页面提取所有的链接。

具体步骤是:

  1. 逐个找到 <h3 class="r"> 的出现位置。

  2. 提取出链接

http://xrayoptics.by.ru/database/misc/goog2text.py 我需要重新写这个脚本,以提取在谷歌上找到的所有链接。

我该怎么做呢?谢谢。

3 个回答

-1

你可以使用正则表达式(RegEx)来实现这个功能。

这个正则表达式可以找到所有以http开头并且被引号(")包围的URL:

http([^\"]+)

在Python中,你可以这样做:

import re
myRegEx = re.compile("http([^\"]+)")
myResults = MyRegEx.search('<source>')

替换成你存放源代码的变量,这样就可以搜索URL了。

myResults.start()myResults.end()现在会包含找到的URL的起始和结束位置。你可以使用myResults.group()这个函数来获取与正则表达式匹配的字符串。

如果还有什么不明白的地方,随时问我。

-1

我会使用XPATH,想了解在Python中用哪个包比较合适,可以查看这里的问题。

1

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据的类型不匹配。这就像是你想把果汁倒进水桶,但水桶里已经有了沙子,这样就会造成混乱。

为了避免这些问题,我们需要确保在处理数据之前,先检查一下数据的状态。这样可以确保我们在使用数据的时候,不会出现意外的错误。

总之,处理数据就像是做一件需要小心的事情,确保每一步都正确,这样才能得到我们想要的结果。

from BeautifulSoup import BeautifulSoup

html = """<html>
...
<h3 class="r">
<a href="http://en.wikipedia.org/wiki/Digital_Signature_Algorithm" class=l
   onmousedown="return clk(this.href,'','','','6','','0CDEQFjACOAM')">
text</a>
</h3>
...
<h3>Don't find me!</h3>
<h3 class="r"><a>Don't find me!</a></h3>
<h3 class="r"><a class="l">Don't error on missing href!</a></h3>
...
</html>
"""
soup = BeautifulSoup(html)

for h3 in soup.findAll("h3", {"class": "r"}):
  for a in h3.findAll("a", {"class": "l", "href": True}):
    print a["href"]

撰写回答