【问题标题】:Make a list of all the files on a website列出网站上的所有文件
【发布时间】:2013-12-07 15:32:26
【问题描述】:

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

当我调用它时,代码没有运行。我已将打印语句放入函数中,但没有任何反应。 我应该怎么做才能修复它?这个函数如何返回网站中所有文件的列表?

【问题讨论】:

  • 嗨,“网站中的文件”是什么意思?您指的是页面上的链接吗?
  • 我指的是页面的文件系统。例如, find_files("python.org") 的结果将是 python.org/doc 以及 python.org/about 以及站点文件系统中的所有其他目录和文件。
  • 这些都不是“文件”或“目录”。它们是链接。
  • 好的,所以您想要获取<a> 标签的“href”属性列表?
  • 你真的循环超过find_files()吗?试试for result in find_files(): print result。这是一个生成器函数,在您对其进行迭代之前它不会做任何事情。

标签: python beautifulsoup python-requests


【解决方案1】:

试试这个让你开始..

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 添加到所有结果中,因为其中一些是针对其他网站的,因此某些结果 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 以使此代码更可重用。

【讨论】:

  • 哇,老兄,python 是开源的,网站也是开源的干净的借口
  • @KDawG,是的,但不先检查似乎很粗鲁:)
【解决方案2】:

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

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

这可以替代整个for循环。

顺便说一句,这也可以更快一些,但这应该不是问题。假设它迭代的数据是正确的并且格式正确,这应该可以工作。

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多