【问题标题】:Beautiful Soup output none while parsing URLs解析 URL 时,Beautiful Soup 不输出任何内容
【发布时间】:2020-05-15 14:18:12
【问题描述】:

我编写了一个函数来解析来自archivesNDTV News 的文章URL。它返回 None 输出而不是 URL 列表。为什么它返回 None?

    def parse_ndtv_archive_links():
        url_count=0
        links = []
        url = makeURL()
        while (url_count < len(url)):
            page=requests.get(url[url_count]).text
            soup=BeautifulSoup(page,'lxml')
            section=soup.find('div', id="main-content")
            for a in section.findAll('li'):
                href=a.get('href')
                links.append(href) 
            url_count += 1
        return list(links) 
print(parse_ndtv_archive_links())

因此,解析函数会在 NDTV 的每一天档案中循环并获取 URL。因此makeURL() 函数会生成一段时间内的归档 URL 列表。

【问题讨论】:

    标签: python html beautifulsoup web-crawler


    【解决方案1】:

    这是因为在您的变量a 中没有存储标签&lt;a&gt;,而是标签&lt;li&gt; 和标签&lt;li&gt; 没有属性href。解决这个问题的一种方法是这样的。

    for li in section.findAll('li'):
        href=li.a.get('href')
        links.append(href)
    

    编辑:现在分开几天

    import requests
    from bs4 import BeautifulSoup
    
    urls = ['http://archives.ndtv.com/articles/2020-05.html']
    for url in urls:
        current_day = 1
        page = requests.get(url).text
        soup = BeautifulSoup(page, 'lxml')
        days = soup.find('div', {'id': 'main-content'}).find_all('ul')
        links = {day_num: [] for day_num in range(1, len(days)+1)}
        for day in days:
            for li in day.findAll('li'):
                href = li.a.get('href')
                links[current_day].append(href)
            current_day += 1
    print(links)
    

    结果存储在字典links 中,其中键是月份中的天数,值是链接列表。这本字典只包含 一个 个月的天数,如果您希望存储超过一个月的数据,您需要稍微调整一下这段代码。

    【讨论】:

    • for li in section.findAll('li'): AttributeError: 'NoneType' object has no attribute 'findAll' 还是一样的错误。
    • 那么您的makeURL() 功能无法正常工作。我用url 变量中的硬编码网址测试了我的解决方案,它可以工作。
    • 你可以说你从一开始就有这个错误,并不是说你的程序没有错误只是返回 None 而不是链接。
    • 谢谢 :) 它可以正常工作,但它正在抓取完整的月份文章 URL。有什么方法可以获取特定日期的文章 URL,比如 2020 年 5 月 5 日或任何时期?
    • 我将编辑我的答案,如果它解决了您的问题,您可以将此问题标记为答案
    猜你喜欢
    • 2019-03-06
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多