我试图将这个对象的价格输入一个变量,并将其打印出来/放入CSV.

这是我试图解析的html部分:

<span class="price" data-js-product-price="">
 <span>$429.00 USD</span>
</span>

这是我的python代码(抱歉,我对python有点陌生,我一直在努力解决这个问题,如果代码有点凌乱,那么很抱歉)

from bs4 import BeautifulSoup


url_to_scrape = "https://www.backfireboards.com/?gclid=CjwKCAjwjtOTBhAvEiwASG4bCGHPgmV4XjyqAIFrW0Lr0IiW0AvfTiC7sZ4E-HtM_qJ9k4ahAu2CHxoCH5YQAvD_BwE"

request_page = urlopen(url_to_scrape)
page_html = request_page.read()
request_page.close()

html_soup = BeautifulSoup(page_html, 'html.parser')

board_prices = html_soup.find_all('span', class_='price')

print("num of prices: " + str(len(board_prices)))
file_name = 'product.csv'
f = open(file_name,'w')

headers = 'Title, Price \n'

f.write(headers)

i = 1

for price in board_prices:
    currPrice = price.span.text
    print(i)
    i = i + 1
    print(price)
    print(currPrice)


f.close()

以下是我得到的错误:

Traceback (most recent call last):
  File "/Users/isaiah/PycharmProjects/Web_scrape/main.py", line 26, in <module>
    currPrice = price.span.text
AttributeError: 'NoneType' object has no attribute 'text'

我知道这不是文本对象,但当我打印它时,没有.短信中写道:

1
<span class="price" data-js-popup-cart-subtotal=""></span>
None
2
<span class="price" data-js-product-price=""><span></span></span>
<span></span>
3
<span class="price" data-js-product-price=""><span></span></span>
<span></span>
4
<span class="price"><span></span></span>
<span></span>
5
<span class="price" data-js-product-price=""><span></span></span>
<span></span>
6
<span class="price" data-js-product-price=""><span></span></span>
<span></span>

我不知道为什么429美元会消失在物品中,我对网络垃圾之类的东西有点陌生.有什么很简单的事我也不知道吗?

另外,从我所能告诉你的,这个网站在这个页面上列出了8个价格,而board_prices对象的大小只有6?有人能给我解释一下吗?

推荐答案

您在页面上看到的数据是从外部源加载的.要获得电动滑板的名称/价格,您可以使用以下示例:

import requests
from bs4 import BeautifulSoup


url = "https://www.backfireboards.com/collections/electric-skateboards"
soup = BeautifulSoup(requests.get(url).content, "html.parser")

for h4 in soup.select(".product-collection__content h4"):
    title = h4.get_text(strip=True)
    price = h4.find_next(class_="price").contents[-1].text
    print("{:<15} {}".format(price, title))

输出:

$429.00 USD     Backfire G2 Black with Super Power Hobbywing Motors and 96mm Wheels with 180 Days Warranty Especially Suitable for Beginners
$649.00 USD     Backfire G3 with Super Flexible Deck
$799.00 USD     Backfire Zealot S Belt Drive Electric Skateboard
$1,899.00 USD   Backfire Hammer Sledge
$1,199.00 USD   Backfire Hammer Belt Drive All Terrain Electric Skateboard
$649.00 USD     Backfire Zealot Belt Drive Electric Skateboard
$1,399.00 USD   Backfire Ranger X3 All Terrain Electric Skateboard with 1500W X2 Ultra High Power Ultra High Torque Motors and 12S High Voltage High Efficiency Electronic System
$999.00 USD     Backfire Ranger X2 All Terrain Electric Skateboard with 1200W X2 Ultra High Power Ultra High Torque Motors and 12S High Voltage High Efficiency Electronic System
$599.00 USD     Backfire Mini Super Portable Electric Skateboard Best for City Commute
$999.00 USD     Backfire G3 Plus with Carbon Fiber Deck and Ultra Long Range
$499.00 USD     Backfire ERA Electric Skateboard

Python相关问答推荐

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

使用mySQL的SQlalchemy过滤重叠时间段

pandas DataFrame GroupBy.diff函数的意外输出

比较2 PD.数组的令人惊讶的结果

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

可变参数数量的重载类型(args或kwargs)

计算组中唯一值的数量

数据抓取失败:寻求帮助

如何在python polars中停止otherate(),当使用when()表达式时?

如何请求使用Python将文件下载到带有登录名的门户网站?

实现自定义QWidgets作为QTimeEdit的弹出窗口

当我try 在django中更新模型时,模型表单数据不可见

旋转多边形而不改变内部空间关系

基于行条件计算(pandas)

合并与拼接并举

如何在Python Pandas中填充外部连接后的列中填充DDL值

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

Fake pathlib.使用pyfakefs的类变量中的路径'

`Convert_time_zone`函数用于根据为极点中的每一行指定的时区检索值

PANDA:如何将多选列转换为索引/列