Python 如何使用正则表达式获取html # #我正在努力抓取href中的文本 image=str(汤) image\u re=re.compile('\

Python 如何使用正则表达式获取html # #我正在努力抓取href中的文本 image=str(汤) image\u re=re.compile('\,python,regex,Python,Regex,Edit):这使用了BeautifulSoup包,我想我在这个问题的前一个版本中看到了这个包 编辑:更简单的是: #<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\'

Edit):这使用了BeautifulSoup包,我想我在这个问题的前一个版本中看到了这个包

编辑:更简单的是:

#<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!
除此之外,您还可以使用:

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"]
重新导入
link_tag_re=re.compile(r'(]*>'))
#使用它捕获文本中的所有链接标记。然后,使用以下各项:
href\u capture=re.compile(r'href\s*=\s*(\'[^\']*\'.[124;“[^”]*”)
第一个正则表达式将捕获整个
标记;第二个正则表达式将查找
href=“something”
href='something'


但是,一般来说,您可能应该使用HTML的XML解析器,即使这个问题是一个非常常见的语言问题。对于这类问题,它们使用起来简单得多,并且不太可能给您带来问题。

您应该使用HTML解析器,例如
lxml.HTML
BeautifulSoup
。但是如果您只想要获取单个
链接的
href
,您也可以使用一个简单的正则表达式:

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*(\'[^\']*\'|"[^"]*")')

您最好对数据使用适当的HTML解析器,但如果您真的想走这条路,那么以下几点可以做到:

re.findall(r"href=(['\"])([^\1]*)\1", url)
>>数据=“……”
>>>
>>>重新搜索(“]+?rel='canonical'[^>]+?href=”([^']+)”,x)。组(1)
'http://www.samplewebsite.com/image/5434553/'
>>>

我还注意到,您的HTML使用单引号而不是双引号。

这将是与您给出的示例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/'
>>>

+1,太酷了。你需要什么库和/或需要导入什么模块才能工作?我不是发布这个问题的人(此外,在我看到的问题版本中,我没有看到任何BeautifulSoup引用)。我可以查找BeautifulSoup,但我认为如果您将其添加到评论或答案中,未来的新手可能会发现更多有用的信息。没有BS引用,Soup可以是具有u str___()))的类型。但是,是的,应该使用html解析器。抱歉,我以为我看到了原始问题(已编辑)中列出的BeautifulSoup。无论如何,BeautifulSoup库在解析/搜索HTML和XML文档方面非常棒。文档更简单的方法是在BeautifulSoup(doc.findAll('link',rel='canonical')]中使用
result=[tag['href']for标记
intead for/if.BS.findAll()可以对属性值设置限制。如何使用lxml?
<link rel='canonical' href='(\S+)'