2016-08-29 89 views
-1

我正在学习使用Python进行web报废。我正在尝试从热门金融网站的网站地图中提取所有链接。Python正则表达式不会返回任何匹配结果

bsObj = BeautifulSoup(html, "html.parser") 

for link in bsObj.findAll("a", 
href=re.compile("^(/india/stockmarket/pricechartquote/)*$")): 

    if 'href' in link.attrs: 
     print(link.attrs['href']) 
print('found nothing') 

此代码没有找到任何内容。尽管现场有很多与上述匹配的链接。 示例:/印度/股市/ pricechartquote/A

+0

是'HREF = ...'线正确缩进? – depperm

回答

2

您是否尝试过检查,如果这个正则表达式匹配的URL所提供的部分 - 它并不:

>>> import re 
>>> 
>>> pattern = re.compile("^(/india/stockmarket/pricechartquote/)*$") 
>>> pattern.search("/india/stockmarket/pricechartquote/A") 
>>> 

相反,你的意思是有最后一部分在pricechartquote/匹配之后,例如,一个或多个大写字母:

>>> pattern = re.compile(r"^/india/stockmarket/pricechartquote/[A-Z]+$") 
>>> pattern.search("/india/stockmarket/pricechartquote/A") 
<_sre.SRE_Match object at 0x109240098> 

请根据您预计后看到设置什么样的性格调整[A-Z]+部分0。


还要注意的是,你不必检查字符串的开始和结束,可能是很好的去与部分URL匹配:

for link in bsObj.find_all("a", href=re.compile(r"/india/stockmarket/pricechartquote/")): 
    # ... 
+0

如果我想要在/ pricechartquote /后查找野性字符,该怎么办?我不能使用像'^(/ india/stockmarket/pricechartquote/*)$'? –

+0

@BhaveshGhodasara你可以做'/ india/stockmarket/pricechartquote /.*'或者如果你想让这个通配符不匹配'/',你可以像'/ india/stockmarket/pricechartquote/[^ /] 。 – alecxe

+0

@alexce为什么/india/stockmarket/pricechartquote/.*会起作用,为什么/ india/stockmarket/pricechartquote/*不起作用? –