2016-08-29 2 views
-1

저는 파이썬을 사용하여 웹 스크랩을 배우고 있습니다. 인기있는 금융 사이트의 사이트 맵에서 모든 링크를 추출하려고합니다.파이썬 정규 표현식은 일치를 위해 아무 것도 반환하지 않습니다.

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/*가 작동하지 않습니까? –

관련 문제