2015-09-25 104 views
0

我正在寫一個簡單的python3腳本,以從Sourceforge.net中提取儘可能多的公共庫。我跑進與URL一個奇怪的問題,我很好奇,爲什麼它的發生:Python刮臉URL問題

這裏是我的代碼

#!/usr/bin/env python3 

import time 
from requests import get 
from bs4 import BeautifulSoup 

results = [] 

for i in range(1,100): 
    cur = 'http://sourceforge.net/directory/os%3Alinux/freshness%3Arecently-updated/?page=' + str(i) 
    #print(cur + '\n') 
    r = get(cur.format(i)) 
    soup = BeautifulSoup(r.text,'html.parser') 
    results += soup.find_all('span',{'itemprop': 'name'}) 
    for result in results: 
     print('Found Project: '.join(result.contents)) 
    time.sleep(.5) 
    results = [] 

產生的問題是,當我刪除/ OS%3Alinux /從URL中爲了有更廣泛的項目......當我這樣做時,輸出是第1頁的輸出一遍又一遍。不提取看起來的其他頁面。有誰知道爲什麼會發生這種情況?我還從別人那裏得到了r = get(cur.format(i)),並對這實際上在做什麼感到好奇。

回答

1
http://sourceforge.net/directory/freshness%3Arecently-updated/?page=1 

不是有效的URL。它重定向到:

http://sourceforge.net/directory/os:windows/freshness:recently-updated/ 

因此,當您增加計數器時,您總是重定向回到相同的URL。

from bs4 import BeautifulSoup 
import requests 



for page in range(1, 100): 
    r = requests.get("http://sourceforge.net/directory/?page=" + str(page)) 
    data = r.text 
    soup = BeautifulSoup(data, "html.parser") 

    print soup.find_all('span',{'itemprop': 'name'}) 
+0

有沒有辦法刪除os:windows/os:linux標籤?不會造成問題?如果沒有,我可以運行這兩個操作系統並刪除常見的。但是,感謝您的答案,無可厚非 – CodyJae

+0

http://sourceforge.net/directory/freshness%3Arecently-updated/?page=1涵蓋了所有操作系統。 – ansario

+0

不幸的是,當我更改爲此網址時,我碰到的問題是它不會產生除第一頁以外的任何結果 – CodyJae