2015-06-01 36 views
2

我正在嘗試編寫一個程序來檢索在特定標記中具有活動獎勵的問題的所有鏈接。我還沒有實現特定的標記功能,因爲我只是試圖獲得所有的鏈接。檢索堆棧溢出的所有功能問題

from re import findall 
from urllib.request import urlopen 


def fetch_source(url): 
    return str(urlopen(url).read()) 


site = 'http://stackoverflow.com/?tab=featured' 


def fetch_links(source): 
    source = fetch_source(source) 
    return findall("\/questions\/[0-9]*\/(?:[A-z]|\-)+", source) 


print(fetch_links(site)) 

這將會獲取很多的聯繫,但它錯過了很多人,因爲我的正則表達式只允許在標題[A-z]|\-。我不知道如何解決這個問題,因爲有些問題在標題中有引號,如果我允許這些問題,我不會知道問題鏈接何時結束?

我很抱歉被新的python,但我只是想弄清楚。

+1

你不應該獲取與re.findall鏈接。改爲使用Stack Exchange API。 –

+0

只有fyi'[A-z]'相當於'[A-Z \ [\\\]^_ \'a-z]' – sln

回答

3

使用正則表達式對於通過特定標籤獲取問題將變得完全不可行。

你是正確的,你的正則表達式缺少很多標題,但在這種情況下使用findall確實不合適。 Beautiful soup,是一個更好的工具來檢索鏈接,我建議你看看它。

然而,在這種情況下,Stack Exchange API你有覆蓋。

對於類似的問題,只需搜索(或谷歌)通過API documentation,直到你看到你正在尋找的功能,在你的情況下featured question

輸入你想要的參數,和API將顯示生成鏈接:

https://api.stackexchange.com/2.2/questions/featured?order=desc&sort=votes&tagged=python&site=stackoverflow 

示例檢索所有功能的Python問題