我有一个网站,其中有像<a href="http://www.example.com?read.php=123">
这样的链接。任何人都可以告诉我如何使用python在这样的链接中获取所有数字(在这种情况下为123)?我不知道如何构建一个正则表达式。提前谢谢。
答案 0 :(得分:3)
import re
re.findall("\?read\.php=(\d+)",data)
答案 1 :(得分:2)
“如果您遇到问题,并决定使用正则表达式,那么现在您有两个问题......”
如果您正在阅读某个特定网页并且您知道它是如何格式化的,那么正则表达式就可以了 - 您可以使用S. Mark的答案。要解析特定链接,您可以使用Kimvai的答案。但是,要从页面获取所有链接,最好使用更严重的内容。你提出的任何正则表达式解决方案都会有缺陷,
我建议mechanize。如果您注意到,Browser
类有一个links
类,可以获取页面中的所有链接。它还有一个额外的好处,就是能够为你下载页面=)。
答案 2 :(得分:1)
虽然其他答案都是正确的,但您应该使用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"]
它不像上面的一些简单,但保证即使使用更复杂的网址也能正常工作。
答案 3 :(得分:1)
无论您的链接的格式如何(例如,如果某些链接看起来像<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]
答案 4 :(得分:-1)
答案 5 :(得分:-1)
一个不需要正则表达式
>>> 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]