【问题标题】:AttributeError when using BeautifulSoup使用 BeautifulSoup 时出现 AttributeError
【发布时间】:2019-03-24 16:59:08
【问题描述】:

我正在编写一个脚本来生成 JSON 文件,但遇到了一些问题。

import requests
from bs4 import BeautifulSoup

url = requests.get('https://www.perfectimprints.com/custom-promos/20492/Beach-Balls.html')
source = BeautifulSoup(url.text, 'html.parser')

product_feed = source.find('div', id_="pageBody")

products = product_feed.find_all('div', class_="product_wrapper")

single_product = products[0]

product_name = single_product.find('div', class_="product_name")
product_name = product_name.a.text

sku = single_product.find('div', class_="product_sku")
sku = sku.text

def get_product_details(product):
  product_name = product.find('div', class_="product_name").a.text
  sku = single_product.find('div', class_="product_sku").text
  return {
    "product_name": product_name,
    "sku": sku
  }

all_products = [get_product_details(product) for product in products]
print(all_products)

我收到的错误消息是:Traceback (most recent call last): File "scrape.py", line 9, in <module> products = product_feed.find_all('div', class_="product_wrapper") AttributeError: 'NoneType' object has no attribute 'find_all'

根据我的阅读,这是因为它没有找到 product_wrapper 类的任何内容,但这没有任何意义。

【问题讨论】:

    标签: python python-3.x beautifulsoup attributeerror


    【解决方案1】:

    问题是product_feed = source.find('h1', id_="pageBody") 正在返回None。我试过你的代码,product_feed = source.find_all('h1') 只返回 1 个没有 id 信息的项目。

    【讨论】:

    • 谢谢。我解决了这个问题,但它仍然返回错误:Traceback (most recent call last): File "scrape.py", line 9, in &lt;module&gt; products = product_feed.find_all('div', class_="product_wrapper") AttributeError: 'NoneType' object has no attribute 'find_all'
    【解决方案2】:

    查看网站的源代码,id="pageBody" 的元素是div,而不是h1。因此,当您使用source.find 时,它会返回None。试试:

    ...
    product_feed = source.find('div', id_="pageBody")
    ...
    

    【讨论】:

    • 谢谢。我解决了这个问题,但它仍然返回错误:Traceback (most recent call last): File "scrape.py", line 9, in &lt;module&gt; products = product_feed.find_all('div', class_="product_wrapper") AttributeError: 'NoneType' object has no attribute 'find_all'
    【解决方案3】:

    您不需要product_feed,删除它并将下一行更改为:

    products = source.find_all('div', class_="product_wrapper")
    

    可以在最后验证:print(len(all_products)) 987654324 @

    【讨论】:

    • 这做了它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多