damn6 2024-09-29 18:47 采纳率: 0%
浏览 4

关于#爬虫#的问题:报错如下(这个网页.com/pages/page3.html)(语言-python)

自学python爬虫
代码如下

from bs4 import BeautifulSoup
import requests

html=requests.get('https://www.pythonscraping.com/pages/page3.html').text
soup=BeautifulSoup(html,'html.parser')

print(soup.find('img',{'src':'../img/gifts/img1.jpg'}).parent.previous_siblings.get_text())

报错如下(这个网页https://www.pythonscraping.com/pages/page3.html

Traceback (most recent call last):
  File "butf.py", line 7, in <module>
    print(soup.find('img',{'src':'../img/gifts/img1.jpg'}).parent.previous_siblings.get_text())
AttributeError: 'generator' object has no attribute 'get_text'

弄弄很久了。help me,就是跟说上说的返回父标签的上一个兄弟标签不一样

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-29 18:48
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个错误提示的原因是 soup.find('img', {'src':'../img/gifts/img1.jpg'}).parent.previous_siblings 返回的是一个生成器对象(generator),而不是一个可以直接访问其 get_text() 方法的对象。你需要先获取到生成器的内容再进行操作。这里我们可以使用列表推导式(list comprehension)将生成器转化为列表,然后访问其中的 get_text() 方法。下面是修改后的代码:

    from bs4 import BeautifulSoup
    import requests
    
    html = requests.get('https://www.pythonscraping.com/pages/page3.html').text
    soup = BeautifulSoup(html, 'html.parser')
    
    img_tag = soup.find('img', {'src':'../img/gifts/img1.jpg'})
    if img_tag:  # 检查 img 标签是否存在
        siblings_text = [sibling.get_text() for sibling in img_tag.parent.previous_siblings]  # 使用列表推导式获取生成器的文本内容
        print("".join(siblings_text))  # 输出文本内容,如果需要分隔字符则用 join 函数合并列表内容
    else:
        print("未找到符合条件的 img 标签")  # 如果未找到标签则输出提示信息
    

    这样修改后,应该可以正确获取到父标签的上一个兄弟标签的文本内容。注意这里也添加了检查 img 标签是否存在的逻辑,以防找不到标签时出现错误。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月29日

悬赏问题

  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?
  • ¥15 nasm x86 变量归零
  • ¥65 Tree 树形控件实现单选功能,可以使用element也可以手写一个,实现全选为全选状态
  • ¥60 寻抓云闪付tn组成网页付款链接
  • ¥16 寻字节跳动内部人员帮推简历