2015-09-25 2 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 tag? не вызывая проблемы? Если нет, я могу просто запустить обе ОС и удалить общие. Но спасибо за ответ, но не все. – CodyJae

+0

http://sourceforge.net/directory/freshness%3Arecently-updated/?page=1 охватывает все ОС. – ansario

+0

К сожалению, проблема, с которой я сталкиваюсь, когда я перехожу к этому URL-адресу, состоит в том, что он не дает никаких результатов, кроме первой страницы. – CodyJae