qq_74845768 2024-05-15 13:37 采纳率: 42.9%
浏览 38
已结题

Python用bs4爬取嵌套在ul里的li信息,获取不全

题目情况:用bs4获取标题和简介

img

出现了问题,我只能爬取每个ul里第一个li的内容,但是每个ul里有很多li,而且li没有class,无法直接定位,我的主要代码和运行结果如下:

img

img

img

我的解题思路起初是再遍历一下ul,可是find_all返回的是列表,不能再用一次find_all了,现在不知道该怎么解决这个问题,初学Python,在网上也没有找到解决办法,请求各位劳斯帮助!

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-15 14:10
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是解决在使用Python的BeautifulSoup库(bs4)爬取汽车之家新闻信息时,无法获取每个ul标签内所有li标签内容的问题。您只能获取到每个ul内的第一个li的内容,而实际上每个ul内可能包含多个li

    【图片内容】:

    1. 第一张图片展示了爬取新闻信息的需求,包括标题和内容。
    2. 第二张图片显示了您尝试爬取的代码,包括定义的getCarData函数,该函数接收开始页码和结束页码作为参数,并在循环中构建URL,加载HTML,解析数据,并将结果保存到JSON文件。
    3. 第三张图片展示了Load_html函数,用于加载指定URL的HTML内容。
    4. 第四张图片展示了parse_lxml函数,该函数负责解析HTML内容并提取新闻标题和内容。但是,代码中存在一个问题,导致只能获取到每个ul下的第一个li

    【问题出现原因】:问题出现的原因是在parse_lxml函数中,您使用了find方法来查找h3p标签,这只能找到第一个匹配的元素。由于您需要获取所有li中的内容,您应该使用find_all方法来找到所有匹配的h3p标签。

    【问题解决方案】:为了解决这个问题,您需要修改parse_lxml函数,使其能够遍历每个ul下的所有li,并获取每个li中的h3p标签的内容。

    【提供代码】:以下是修改后的parse_lxml函数的代码示例,它将能够获取每个ul下所有li的内容:

    def parse_lxml(html):
        tree = etree.HTML(html)
        soup = BeautifulSoup(html, features='lxml')
        node_lists = soup.find_all(name='ul', class_='article')
        items = []
    
        for node_list in node_lists:
            li_tags = node_list.find_all('li')
            for li in li_tags:
                title = li.find('h3').text if li.find('h3') else ''
                content = li.find('p').text if li.find('p') else ''
                item = {
                    "文章标题": title,
                    "文章内容": content
                }
                items.append(item)
    
        return items
    

    【代码运行方式】:要运行这段代码,您需要确保您的Python环境中安装了beautifulsoup4lxml库。您可以使用pip安装这些库:

    pip install beautifulsoup4 lxml
    

    然后,您可以将上述函数集成到您的爬虫程序中,并按照您之前的流程运行。

    【代码预期运行结果】:如果代码正确执行,它将遍历每个ul标签下的所有li标签,并获取每个li中的标题和内容,最终将这些信息作为列表返回。

    【推荐相关链接】:

    1. BeautifulSoup官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/
    2. lxml官方文档:https://lxml.de/
    3. Python官方文档:https://docs.python.org/3/

    请注意,上述代码和解决方案是基于您提供的图片和描述进行的假设性解答,实际情况可能需要根据实际的HTML结构进行调整。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月15日