python url fetch help - 正则表达式

时间:2009-12-14 07:15:35

标签: python regex

我有一个网站,其中有像<a href="http://www.example.com?read.php=123">这样的链接。任何人都可以告诉我如何使用python在这样的链接中获取所有数字(在这种情况下为123)?我不知道如何构建一个正则表达式。提前谢谢。

6 个答案:

答案 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)

/ [0-9] /

这是你想要的正则表达式语法

供参考

http://gnosis.cx/publish/programming/regular_expressions.html

答案 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]