#<link rel='canonical' href='http://www.samplewebsite.com/image/5434553/' />
#I am trying to grab the text in href
image = str(Soup)
image_re = re.compile('\<link rel=\'cononical\' href=')
image_pat = re.findall(image_re, image)
print image_pa
#>> []
#Thanks!
答案 0 :(得分:5)
编辑:这使用了BeautifulSoup包,我认为我在此问题的上一版本中看到过。
编辑:更直接的是:
soup = BeautifulSoup(document)
links = soup.findAll('link', rel='canonical')
for link in links:
print link['href']
而不是所有这些,您可以使用:
soup = BeautifulSoup(document)
links = soup("link")
for link in links:
if "rel" in link and link["rel"] == 'canonical':
print link["href"]
答案 1 :(得分:0)
使用两个正则表达式:
import re
link_tag_re = re.compile(r'(<link[^>]*>')
# capture all link tags in your text with it. Then for each of those, use:
href_capture = re.compile(r'href\s*=\s*(\'[^\']*\'|"[^"]*")')
第一个正则表达式将捕获整个<link>
标记;第二个将查找href="something"
或href='something'
。
但是,一般情况下,您应该使用HTML解析器来处理HTML,即使这个问题是完全常规的语言问题。它们更容易用于此类事情,并且不太可能导致您出现问题。
答案 2 :(得分:0)
您应该使用lxml.html
或BeautifulSoup
等HTML解析器。但是,如果你只想抓住一个href
的{{1}},你也可以使用一个简单的正则表达式:
link
答案 3 :(得分:0)
你最好在数据上使用正确的HTML解析器,但如果你真的想沿着这条路走下去,那么下面就会这样做:
>>> data = "... <link rel='canonical' href='http://www.samplewebsite.com/image/5434553/' /> ..."
>>>
>>> re.search("<link[^>]+?rel='canonical'[^>]+?href='([^']+)", x).group(1)
'http://www.samplewebsite.com/image/5434553/'
>>>
我还注意到您的HTML使用单引号而不是双引号。
答案 4 :(得分:0)
这将是匹配您给出的示例html的正则表达式:
<link rel='canonical' href='(\S+)'
但我不确定正则表达式是否是正确的工具。使用双引号(或无引号)时,此正则表达式将失败。或者如果转向rel和href。
我建议使用类似BeautifulSoup的内容来查找和收集所有相关的规范href值。