[英]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 095 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 499 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.