<p>如前所述,他们有一种方法来检测提取信息的自动化过程。如果您使用selenium访问页面a,它会显示html。因此,您可以使用selenium获取页面源代码,然后对其进行解析</p>
<p>也稍微理清了你的逻辑。您正在打印<code>'in stock'</code>,无论是否有任何可用数量</p>
<p>另外,如果在使用<code>find_all()</code>时只需要拉取第一个元素(<code>soup.find_all(class_="js-product-sizer sizes__layout built")[0]</code>),那么最好只使用<code>find()</code>,因为它返回的正是它找到的第一个元素</p>
<p><strong>代码:</strong></p>
<pre><code>from selenium import webdriver
from bs4 import BeautifulSoup
import time
url = 'https://www.decathlon.it/p/disco-ghisa-bodybuilding-28mm/_/R-p-7278?mc=1042303&c=NERO'
while True:
driver = webdriver.Chrome(executable_path=r'C:/chromedriver_win32/chromedriver.exe')
meta = 'ROBOTS'
while meta == 'ROBOTS':
driver.get(url)
page = driver.page_source
soup = BeautifulSoup(page,'html.parser')
if 'name' in soup.find('meta').attrs:
meta = soup.find('meta')['name']
else:
meta = False
driver.close()
anchor_tag = soup.find(class_="js-product-sizer sizes__layout built")
items_list = anchor_tag.find_all('li')
for item in items_list:
if item['data-weight'] == '0.528':
continue
quantity = item['data-available-quantity']
itemStr = item.text.split('\n')
if int(quantity) > 0:
itemStr.insert(2,quantity)
itemStr = ' '.join(itemStr).strip()
if item['data-available-quantity'] == '0':
print(f"Size {itemStr} OOS")
else:
print(f"Size {itemStr} in stock!")
time.sleep(60)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>Size 0,5 KG 1584 Disponibile in stock!
Size 1 KG 0 disponibili OOS
Size 2 KG 0 disponibili OOS
Size 5 KG 0 disponibili OOS
Size 10 KG 0 disponibili OOS
Size 20 KG 0 disponibili OOS
</code></pre>