我有一个我要解析其中一部分的URL,特别是widgetid:
<a href="http://www.somesite.com/process.asp?widgetid=4530">Widgets Rock!</a>
我写过这篇Python(我在Python上有点新手 - 版本是2.7):
import re
from bs4 import BeautifulSoup
doc = open('c:\Python27\some_xml_file.txt')
soup = BeautifulSoup(doc)
links = soup.findAll('a')
# debugging statements
print type(links[7])
# output: <class 'bs4.element.Tag'>
print links[7]
# output: <a href="http://www.somesite.com/process.asp?widgetid=4530">Widgets Rock!</a>
theURL = links[7].attrs['href']
print theURL
# output: http://www.somesite.com/process.asp?widgetid=4530
print type(theURL)
# output: <type 'unicode'>
is_widget_url = re.compile('[0-9]')
print is_widget_url.match(theURL)
# output: None (I know this isn't the correct regex but I'd think it
# would match if there's any number in there!)
我认为我错过了正则表达式(或者我对如何使用它们的理解),但我无法理解。
感谢您的帮助!
答案 0 :(得分:5)
这个问题与BeautifulSoup没有任何关系。
问题在于,the documentation explains,match
仅匹配字符串的开头。由于您要查找的数字位于字符串的末尾,因此不返回任何内容。
要匹配任何地方的数字,请使用search
- 您可能希望将\d
实体用于数字。
matches = re.search(r'\d+', theURL)
答案 1 :(得分:4)
我认为你不想重拍 - 你可能想要:
from urlparse import urlparse, parse_qs
s = 'http://www.somesite.com/process.asp?widgetid=4530'
qs = parse_qs(urlparse(s).query)
if 'widgetid' in qs:
# it's got a widget, a widget it has got...
答案 2 :(得分:2)
使用urlparse:
from urlparse import urlparse, parse_qs
o = urlparse("http://www.somesite.com/process.asp?widgetid=4530")
if "widgetId" in parse_qs(o.query):
# this is a 'widget URL'