【发布时间】:2009-12-14 07:15:35
【问题描述】:
我有一个网站,上面有 <a href="http://www.example.com?read.php=123"> 之类的链接,谁能告诉我如何使用 python 获取此类链接中的所有数字(在本例中为 123)?我不知道如何构建正则表达式。提前致谢。
【问题讨论】:
-
谢谢大家的回答
我有一个网站,上面有 <a href="http://www.example.com?read.php=123"> 之类的链接,谁能告诉我如何使用 python 获取此类链接中的所有数字(在本例中为 123)?我不知道如何构建正则表达式。提前致谢。
【问题讨论】:
import re
re.findall("\?read\.php=(\d+)",data)
【讨论】:
“如果你有问题,决定使用正则表达式,现在你有两个问题......”
如果您正在阅读一个特定的网页并且您知道它的格式,那么正则表达式就可以 - 您可以使用 S. Mark 的答案。要解析特定链接,您可以使用 Kimvai 的答案。但是,要从页面中获取所有链接,最好使用更严肃的东西。您提出的任何正则表达式解决方案都会有缺陷,
我推荐mechanize。如果您注意到,Browser 类有一个 links 方法,它可以获取页面中的所有链接。它的额外好处是能够为您下载页面 =)。
【讨论】:
无论链接的格式如何(例如,有些看起来像 <a href="foo=123"/> 而有些看起来像 <A TARGET="_blank" HREF='foo=123'/>),这都会起作用。
import re
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
p = re.compile('^.*=([\d]*)$')
for a in soup.findAll('a'):
m = p.match(a["href"])
if m:
print m.groups()[0]
【讨论】:
虽然其他答案有点正确,但您可能应该改用 urllib2 库;
from urllib2 import urlparse
import re
urlre = re.compile('<a[^>]+href="([^"]+)"[^>]*>',re.IGNORECASE)
links = urlre.findall('<a href="http://www.example.com?read.php=123">')
for link in links:
url = urlparse.urlparse(link)
s = [x.split("=") for x in url[4].split(';')]
d = {}
for k,v in s:
d[k]=v
print d["read.php"]
它不像上面的一些那么简单,但保证即使使用更复杂的 url 也能工作。
【讨论】:
【讨论】:
一个不需要正则表达式的方法
>>> s='<a href="http://www.example.com?read.php=123">'
>>> for item in s.split(">"):
... if "href" in item:
... print item[item.index("a href")+len("a href="): ]
...
"http://www.example.com?read.php=123"
如果你想提取数字
item[item.index("a href")+len("a href="): ].split("=")[-1]
【讨论】: