繁体   English   中英

Beautiful Soup 找到 function 返回 None

[英]Beautiful Soup find function returns None

由于某种原因,即使它存在于 html 代码中,查找 function 也不会返回任何结果。 第一个查找: price = row.find('div', {'class': 'price-normal selenium-price-normal'})正常返回价格,但第二个: price = row.find('div', {'class': 'price-normal'}) Return none 当我尝试从中打印文本时,即使 HTML 看起来非常相似,我也会出错: AttributeError: 'NoneType' object has no attribute 'text'

这是 HTML,我无法从中提取数据:

<div class="product-price  price-show instalments-show">
                <div class="price-normal">
                    4&nbsp;095&nbsp;zł</div>
                <div class="price-instalments-box">
                        <div class="price-instalments-row">
                            <span class="price-instalments-label">
                                    RATY:</span>
                            <a href="/telefony-komorkowe/apple-iphone-12-256gb-zielony.bhtml#outlet-doskonaly|raty" class="price-instalments selenium-price-instalments js-scroll-by-hash">
                                682,50 zł <span>x 6 rat 0%</span><i></i>
                                </a>
                        </div>
                    </div>
                </div>

这是有效的 HTML:

<div class="product-prices-box">
        <div class="product-price product-price-101611036529 price-show instalments-show">
    <div class="price-presentation">
                    <div class="price-normal selenium-price-normal">
    5&nbsp;499&nbsp;zł</div>
</div>

                <div class="price-instalments-box">
            <div class="price-instalments-row">
                <span class="price-instalments-label">
                    RATY:</span>
                <div class="price-instalments price-instalments-only-shop selenium-price-instalments">
                            274,95 zł <span>x 20 rat 0%</span><i></i>
                            </div>
                    </div>
            <div class="price-instalments-row price-instalment-shop-only-info">
                    Raty tylko w sklepie stacjonarnym<a href="#" class="js-price-installment-shop-info"></a>
                </div>
            </div>
    </div>
</div>

这是我的代码:

main_url = 'https://www.euro.com.pl/telefony-komorkowe,_Apple.bhtml'
pages_html = [main_url]
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.implicitly_wait(10)
wait = WebDriverWait(driver, 10)

driver.get(main_url)

soup = BeautifulSoup(driver.page_source , 'lxml')

pages_numbers = soup.find('div', {'class': 'paging-numbers'})

for page in pages_numbers.find_all('a', {'class': 'paging-number'}):
    print(page['href'])
    pages_html.append('https://www.euro.com.pl' + page['href'])


for url in pages_html:
    driver.get(url)
    soup = BeautifulSoup(driver.page_source, 'lxml')
    product_list = soup.find('div', {"id": "products", 'class': 'list'})

    product_rows = soup.find_all('div', {'class': 'product-row'})

    for row in product_rows:
        product = row.find('h2', class_='product-name')
        all_products.append(product.text.strip())
        try:
            price = row.find('div', {'class': 'price-normal selenium-price-normal'})
        except AttributeError:
            price = row.find('div', {'class': 'price-normal'})
            print(price)

        print(f'Produkt: {product.text.strip()}, Cena: {price.text.strip()}')
driver.close()

有谁知道这里发生了什么?

我尝试使用 WebDriverWait object,正如其他帖子所建议的那样,但我无法让它工作。

如果您想获取产品的名称和价格,可以使用下一个示例:

import pandas as pd
import requests
from bs4 import BeautifulSoup


url = 'https://www.euro.com.pl/telefony-komorkowe,_Apple.bhtml'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

all_data = []
for product in soup.select('.product-for-list'):
    name = product.h2.text.strip()
    price = product.select_one('.price-normal').text.strip()
    all_data.append((name, price))

df = pd.DataFrame(all_data, columns=['Name', 'Price'])
print(df.to_markdown(index=False))

印刷:

名称 价格
Apple iPhone 14 128GB (północ) 4 899 兹罗提
Apple iPhone 11 64GB(黑白) 2 799 兹罗提
Apple iPhone 14 Pro 128GB(兹罗提) 7 199 兹罗提
Apple iPhone 11 64GB(黑色) 2 599 兹罗提
Apple iPhone 14 Pro 128GB (gwiezdna czerń) 7 199 兹罗提
Apple iPhone 12 64GB(双色) 3 999 兹罗提
Apple iPhone 13 128GB (księżycowa poświata) 4 749 兹罗提
Apple iPhone 12 64GB(黑色) 3 999 兹罗提
Apple iPhone 13 128GB (północ) 4 199 兹罗提
苹果 iPhone 13 128GB (zielony) 4 749 兹罗提
Apple iPhone 13 256GB (księżycowa poświata) 4 999 兹罗提
苹果 iPhone 12 64GB (niebieski) 3 999 兹罗提
Apple iPhone 14 Pro 256GB(灰色紫癜) 7 899 兹罗提
Apple iPhone 14 128GB (fioletowy) 4 899 兹罗提
Apple iPhone 14 Pro Max 128GB(兹罗提) 7 899 兹罗提
苹果 iPhone 14 Pro 256GB (srebrny) 7 899 兹罗提
苹果 iPhone 14 Pro 128GB (srebrny) 7 199 兹罗提
Apple iPhone 14 Pro 256GB(兹罗提) 7 899 兹罗提
Apple iPhone 14 Pro Max 1TB(黑色) 11 499 兹罗提
Apple iPhone 14 128GB (księżycowa poświata) 4 899 兹罗提
Apple iPhone 13 128GB(已售) 4 749 兹罗提
Apple iPhone 12 128GB(黑白) 4 549 兹罗提
Apple iPhone 14 Plus 128GB(电源) 5 499 兹罗提
Apple iPhone 12 64GB (fioletowy) 3 299 兹罗提
苹果 iPhone 12 128GB (niebieski) 4 549 兹罗提
Apple iPhone 13 mini 128GB (niebieski) 3 499 兹罗提
Apple iPhone 13 mini 128GB (północ) 4 299 兹罗提
Apple iPhone 11 128GB(黑色) 3 099 兹罗提

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM