首页 > 解决方案 > 如何使用 beautifulsoup 从数据框中的 URL 列表中获取特定 html div 的内容?

问题描述

我正在分析来自多个 URL 中特定 div 的文本。

我发现的所有示例都要求输入单个 URL,但就我而言,我正在批量工作。

有什么建议么?

标签: pythonbeautifulsoup

解决方案


让我们把这个问题分成几部分。

首先,我们要获取单个 URL 并返回其对应的 HTML 文档。单独执行此操作还允许我们以透明的方式处理错误和超时。

def get_raw_content(url):
     tmp = requests.get(r.url, timeout=10)
     return tmp.content if tmp.status_code == 200 else None

接下来是有趣的一点。给定一个 HTML 文档,我们现在想要获取特定 div 的内容。这是您的原始代码应该在的地方。

您也可以为此使用 XPATH。但是 BeautifulSoup 不支持 XPATH。我已经编写了一个模块,它为 bs4 提供了一个简单的 XPATH 解释器。如果您需要,请在评论中告诉我。

def get_div_content(url):

    # first fetch the content for this URL
    html_text = get_raw_content(url)
    if html_text is None:
        return None

    # work with beautiful soup to fetch the content you need
    # TODO : insert your code for 1 URL here
    return None

现在,正如其他评论所指出的,我们只需遍历我们拥有的所有 URL,并依次在每个 URL 上执行单个 URL 的代码。

def fetch_all(urls):
    for url in urls:
        txt = get_div_content(url)
        print('{} {}'.format(url, txt))

最后,我们需要一些 python 脚本的入口点。所以我提供了这个主要方法。

if __name__ == '__main__':
    fetch_all(['http://www.google.com', 'http://www.bing.com'])

推荐阅读