2016-07-03 192 views
0

我想從Python正則表達式的web內容額外的網頁鏈接。這裏是我的Python腳本匹配的網址與Python正則表達式

webUrlList = re.findall(r"(?<=<a href=\").+(.html|/)(?=\")", content) 
print webUrlList 

和匹配webUrlList是這樣的:

['/', '.html', '/', '/', '/', '/',...] 

請幫我找出原因,爲什麼這個腳本產生上面的輸出。

目標WEBURL字符串樣本:

<a href="http://ab.test.com/flower/1111027378112/purple/119735281586093.html" 

<a href="/abcabcdef/coffee/su1/" 
+0

我無法重現您的引用輸出。當使用你提供的正則表達式時,'r'(?<= wpcarro

+0

只需讓捕獲組成爲一個非捕獲組。並使用懶點匹配。 –

回答

2

如果你只爲解析鏈接,並且您熟悉將要解析的內容,下面的正則表達式應該可以幫助您完成後續的工作,並且非常安全。

regex = re.compile(r'href="([^"]+)') 
results = re.findall(regex, <CONTENT-HERE>) 
  • href="消耗,但不捕獲文本字符href="
  • ([^"]+)消耗並捕獲這不是一個引號

運行與內容的幾個試驗的任何字符,你正在拼湊並評估您是否需要更正確的正則表達式。

+0

您正在使用're.findall'。 'r'href =「([^」] +)''就夠了。 –

+0

@WiktorStribiżew的確如此。接得好。我會修改上面的答案。 – wpcarro

1

使用HTML解析器像BeautifulSoup

soup = BeautifulSoup(content, "html.parser") 

print([a["href"] for a in soup.find_all("a", href=True)]) 

不要使用正則表達式來解析html

+1

這需要在項目中添加一個額外的模塊BeautifulSoup。我知道可能有比正則表達式更好的解析HTML的工具。但是這個問題是要求使用正則表達式來提取網頁鏈接。所以,儘管你的答案很有效,而且很優雅,但它似乎是旁觀了所要求的。 – wpcarro

+0

@ wcarroll,http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454你不應該使用正則表達式來解析html,沒有任何一方正在問什麼,這是正確的方法,基本上被問到。 –

+1

我幾乎包含在我的評論「是的,我看過臭名昭着的SO帖子」。我想我應該是明確的。這不會改變我上面的評論。如果他只解析包含HTML的小字符串,則正則表達式適用於該任務,我認爲最好包括第三方模塊並學習其API。 – wpcarro