2013-11-22 90 views
1

我正在使用xgoogle在互聯網上搜索某些內容的程序,然後查找結果網站中的所有文件。我在查找網站中的所有文件時遇到問題。我發現了一個類似的question,但我無法使其工作。這是我一直在使用的代碼。列出網站上的所有文件

from bs4 import BeautifulSoup 
import requests 
def find_files(): 
    url = "http://www.python.org" 
    soup = BeautifulSoup(requests.get(url).text) 
    for a in soup.find('div', {'class': 'catlist'}).find_all('a'): 
     yield url + a['href'] 

當我打電話時,代碼無法運行。我已經把函數中的打印語句,但沒有任何反應。 我應該怎麼做才能修復它?這個函數如何返回網站中所有文件的列表?

+0

嗨,你是什麼意思的「網站上的文件」?你指的是網頁上的鏈接嗎? – msturdy

+0

我指的是頁面的文件系統。例如,find_files(「http://www.python.org」)的結果將是http://www.python.org/doc/以及http://www.python.org/about/和全部該站點文件系統中的其他目錄和文件。 – AHuman

+4

這些都不是「文件」或「目錄」。他們是鏈接。 –

回答

3

試試這個,讓你開始..

from bs4 import BeautifulSoup 
import requests 

def find_files(): 
    url = "http://www.python.org" 
    soup = BeautifulSoup(requests.get(url).text) 

    hrefs = [] 

    for a in soup.find_all('a'): 
     hrefs.append(a['href']) 

    return hrefs 

list_of_links = find_files() 

## show what you've found: 
for link in list_of_links: 
    print link 

正如你所看到的,你不能只是添加url到所有的結果,因爲他們中的一些是其他網站,所以一些生成的網址將不存在...您應該對所獲得的所有點擊做出決定。

另外,請上網站的有關網頁運行此

之前刮政策檢查如果你想做到這一點作爲一個發電機,下面可能是有用的:

from bs4 import BeautifulSoup 
import requests 

def find_files(url): 

    soup = BeautifulSoup(requests.get(url).text) 

    for a in soup.find_all('a'): 
     yield a['href'] 

for link in find_files("http://www.python.org"): 
    print link 

請注意 - 我已移動url以使此代碼更具可重用性。

+0

哇啊夥計,蟒蛇是開源的,所以是網站*乾淨的藉口* –

+0

@KDawG,是的,但它似乎粗魯不首先檢查:) – msturdy

1

將它附加到列表中可能是最簡單的代碼,但python確實支持通過迭代僅在一行代碼中獲取列表的方式。這個例子應該工作:

my_list_of_files = [a['href'] for a in soup.find('div', {'class': 'catlist'}).find_all('a')] 

這可以代替整個循環。

在一個側面說明,這也有點快,但這不應該是一個問題。這應該工作,假設它迭代的數據是正確的並且格式正確。

相關問題