如何使用正则表达式提取HTML
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按预期工作。这种情况可能会让人感到困惑,因为我们可能不知道问题出在哪里。
通常,这种问题可能是因为我们没有正确使用这个库,或者是库本身有一些限制。解决这类问题的第一步是仔细阅读库的文档,看看有没有说明我们需要注意的地方。
另外,很多时候,其他程序员也可能遇到过类似的问题,他们会在网上分享他们的经验和解决方案。我们可以通过搜索相关问题,找到一些有用的提示和建议。
总之,遇到问题时,不要着急,先冷静下来,查阅资料,看看有没有人遇到过类似的情况,通常都能找到解决办法。
#<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!
5 个回答
0
这是一个用来匹配你给出的示例HTML的正则表达式:
<link rel='canonical' href='(\S+)'
不过我不太确定正则表达式是不是合适的工具。因为如果值使用双引号(或者没有引号),这个正则表达式就会失效。还有,如果rel和href的位置调换了,它也会出问题。
我建议你使用像BeautifulSoup这样的工具,来查找和收集所有的rel和canonical href值。
0
你应该使用一些HTML解析器,比如 lxml.html
或者 BeautifulSoup
。不过,如果你只是想获取一个链接的 href
属性,使用简单的正则表达式也可以做到:
re.findall(r"href=(['\"])([^\1]*)\1", url)
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"]