2013-11-22 85 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')] 

这可以代替整个循环。

在一个侧面说明,这也有点快,但这不应该是一个问题。这应该工作,假设它迭代的数据是正确的并且格式正确。

相关问题