列出网站上的所有文件

时间:2013-11-22 16:51:09

标签: python beautifulsoup python-requests

我正在开发一个程序,使用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']

我打电话时代码没有运行。我已将print语句放在函数中,但没有任何反应。 我该怎么做才能解决这个问题?该函数如何返回网站中所有文件的列表?

2 个答案:

答案 0 :(得分: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以使此代码更具可重用性。

答案 1 :(得分:1)

将它附加到列表中可能是最容易阅读的代码,但python确实支持通过迭代在一行代码中获取列表的方法。这个例子应该有效:

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

这可以替代整个for循环。

另一方面,这也有点快,但这应该不是问题。这应该有效,假设它迭代的数据是正确的并且格式正确。