Python 网页抓取的所有工作应但我有一个终端底部的错误

Python 网页抓取的所有工作应但我有一个终端底部的错误,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我创建了我的第一个网页抓取程序。一切正常,但终端底部有一个错误,我想了解它显示的问题,以及如何消除它,使其在将来不再显示 from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup my_url = 'https://www.newegg.com/Video-Cards-Video-Devices/Category/ID-38?Tpk=graphics+cards' # opening the

我创建了我的第一个网页抓取程序。一切正常,但终端底部有一个错误,我想了解它显示的问题,以及如何消除它,使其在将来不再显示

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://www.newegg.com/Video-Cards-Video-Devices/Category/ID-38?Tpk=graphics+cards'
# opening the connection, grabbing the page
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

#html parsing
page_soup = soup(page_html, "html.parser")

#grabs each products
containers = page_soup.findAll("div", {"class":"item-container"})

filename = "products.csv"
# the "w" means write and
# "f" is the normal convention for a file writer
f = open(filename, "w")

headers = "brand, product_name, price, shipping\n"

f.write(headers)

for container in containers:
    brand = container.div.div.a.img["title"]
    
    title_container = container.findAll("a", {"class":"item-title"})
    product_name = title_container[0].text

    sales_main_container = container.findAll("ul", {"class":"price"})
    sales_container = sales_main_container[0]
    part_one_price = sales_container.find("strong").text
    part_two_price = sales_container.find("sup").text
    price = part_one_price + part_two_price

    shipping_container = container.findAll("li", {"class":"price-ship"})
    shipping = shipping_container[0].text.strip()

    print("brand: " + brand)
    print("product_name: " + product_name)
    print("price: " + price)
    print("shipping: " + shipping)

    f.write(brand + "," + product_name.replace(",", "|") + "," + price.replace(",", "|") + "," + shipping + "\n")
    
f.close()

但为了以防万一,点击链接是一个问题:

以下是错误:

回溯(最近一次呼叫最后一次): 文件“c:/Users/12082/Documents/Python/web\u scrape/web\u scraping.py”,第33行,在 part_one_price=销售_容器。查找(“强”)。文本 AttributeError:“非类型”对象没有属性“文本”

以下是它在我的终端中的显示方式,这也是我的意图:

品牌:千兆字节 产品名称:GB GeForce RTX 2070超级游戏OC 3X 8G图形卡,GV-N207SGAMING OC-8GD 售价:549.99 航运:免费航运 品牌:EVGA 产品名称:EVGA GeForce GTX 1660 Ti XC游戏,06G-P4-1263-KR,6GB GDDR6,HDB风扇 售价:289.99 运费:3.99美元运费 品牌:千兆字节 产品名称:GB GeForce GTX 1660 SUPER DirectX 12 GV-N166SOC-6GD视频卡 售价:239.99 航运:免费航运 品牌:MSI 产品名称:MSI GeForce RTX 2060 DirectX 12 RTX 2060 VENTUS XS 6G OC视频卡 售价:339.99 航运:免费航运 品牌:华硕 产品名称:华硕ROG Strix Radeon RX 5700 XT ROG-Strix-RX5700XT-O8G-游戏视频卡 价格:459.99 航运:免费航运 品牌:EVGA 产品名称:EVGA GeForce GTX 1660 SC ULTRA GAMING,06G-P4-1067-KR,6GB GDDR5,双风扇,金属背板 售价:239.99 航运:免费航运 品牌:蓝宝石科技 产品名称:蓝宝石脉冲Radeon RX 5700 XT 100416P8GL视频卡 售价:399.99 航运:免费航运 品牌:MSI 产品名称:MSI GeForce GTX 1660 DirectX 12 GTX 1660 VENTUS XS 6G OC视频卡 价格:216.95 航运:免费航运 品牌:千兆字节 产品名称:GB Radeon RX 5700 XT DirectX 12 GV-R57XTGAMING-8GD视频卡 售价:409.99 航运:免费航运 品牌:XFX 产品名称:XFX Radeon RX 5600 XT RX-56XT6DF46视频卡THICC II PRO-14GBPS 6GB高达1620M D6 3xDP HDMI 价格:299.99 航运:免费航运 品牌:阿斯洛克 产品名称:ASRock Radeon RX 5700 XT DirectX 12 RX 5700 XT TAICHI X 8G OC+视频卡 售价:429.99 航运:免费航运

但是,粘贴到这里显示的内容并不相同,因此如果需要查看,我建议单击此链接


excel文件实际上无法粘贴到文本中。

您的代码在第33行出现异常(在某些情况下,第34行也可能出现异常):

part\u one\u price=sales\u container.find(“strong”).text
第二部分价格=销售容器。查找(“sup”)。文本
实际上,您的循环中有一些
sales\u container
实例没有预期的
和/或
标记。由于此
sales\u容器。find(“strong”)
将返回
None
,此数据类型没有属性
。text
因此会引发异常,因为在这些情况下,您基本上是说
part\u one\u price=None。text
无效

为了降低这种风险,可以使用以下代码(替换原始帖子中的第33-35行):

try:#尝试从销售容器中定价和
part_one_price=销售_容器。查找(“强”)。文本
第二部分价格=销售容器。查找(“sup”)。文本
除非异常为e:#如果引发异常
print(f“{product_name}:{e}”)#将产品名称后跟异常打印到控制台
part_one_price=“无法解析价格”#将未找到价格消息分配给var
part_two_price=”“#将部分价格更改为从上一循环清除的空字符串
最后:#一旦尝试或例外完成
价格=第一部分价格+第二部分价格#将价格的两部分合并以备日后使用

您的代码中还有其他一些方面可能需要进行异常处理,以便在运行时以错误的方式访问
None
值时不停止解释器,如本例所示。

请发布文本而不是图像,以获取错误消息等。老兄,说真的,您否决了它,因为有图片??excel文件pice不会以有益的方式转换为文本。使用调试器查找
None
值的原因我使用了它,它说part\u one\u price和part\u two\u price没有属性“text”,我不明白为什么它会出现此错误,我不知道应该如何更改这些变量。在这个脚本的价格部分之前,我一直在关注一个视频,在这个主题中我对python一无所知。我只知道基本的自动取款机