gpt4 book ai didi

python - 使用网页抓取来检查商品是否有库存

转载 作者:行者123 更新时间:2023-12-03 23:02:59 31 4
gpt4 key购买 nike

我正在创建一个 Python 程序,该程序使用网络抓取来检查商品是否有库存。该代码是一个 Python 3.9 脚本,使用 Beautiful Soup 4 并请求抓取该项目的可用性。我最终想让程序搜索多个网站和每个网站内的多个链接,这样我就不必同时运行一堆脚本。程序的预期结果是这样的:2000In Stock但我得到:200[]Out Of Stock'200' 表示代码是否可以访问服务器,200 是预期的结果。 '0' 是一个 bool 值,用于查看该项目是否有库存,预期响​​应要么是 '0' 表示有库存。我给它提供了库存商品和缺货商品,它们都给出了相同的回复 200 [] Out Of Stock .我感觉out_of_stock_divs 有问题内def check_item_in_stock因为那是我得到 [] 的地方它发现该项目的可用性的结果
昨天早些时候我让代码正常工作,我一直在添加功能(比如它抓取多个链接和不同的网站)并且破坏了它,我无法让它恢复到工作状态
这是程序代码。 (我确实根据 Arya Boudaie 先生在他的网站上的代码编写了此代码,https://aryaboudaie.com/ 不过我去掉了他的文本通知,因为我打算让它在我旁边的备用计算机上运行并让它播放响亮的声音,稍后会实现。)

from bs4 import BeautifulSoup
import requests

def get_page_html(url):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}
page = requests.get(url, headers=headers)
print(page.status_code)
return page.content


def check_item_in_stock(page_html):
soup = BeautifulSoup(page_html, 'html.parser')
out_of_stock_divs = soup.findAll("text", {"class": "product-inventory"})
print(out_of_stock_divs)
return len(out_of_stock_divs) != 0

def check_inventory():
url = "https://www.newegg.com/hp-prodesk-400-g5-nettop-computer/p/N82E16883997492?Item=9SIA7ABC996974"
page_html = get_page_html(url)
if check_item_in_stock(page_html):
print("In stock")
else:
print("Out of stock")

while True:
check_inventory()
time.sleep(60)```

最佳答案

产品库存状态位于 <div> 内标签,不是 <text>标签:

import requests
from bs4 import BeautifulSoup


def get_page_html(url):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}
page = requests.get(url, headers=headers)
print(page.status_code)
return page.content


def check_item_in_stock(page_html):
soup = BeautifulSoup(page_html, 'html.parser')
out_of_stock_divs = soup.findAll("div", {"class": "product-inventory"}) # <--- change "text" to div
print(out_of_stock_divs)
return len(out_of_stock_divs) != 0

def check_inventory():
url = "https://www.newegg.com/hp-prodesk-400-g5-nettop-computer/p/N82E16883997492?Item=9SIA7ABC996974"
page_html = get_page_html(url)
if check_item_in_stock(page_html):
print("In stock")
else:
print("Out of stock")

check_inventory()
打印:
200
[<div class="product-inventory"><strong>In stock.</strong></div>]
In stock

注意:该站点的 HTML 标记可能在过去发生了变化,我会修改 check_item_in_stock功能:
def check_item_in_stock(page_html):
soup = BeautifulSoup(page_html, 'html.parser')
out_of_stock_div = soup.find("div", {"class": "product-inventory"})
return out_of_stock_div.text == "In stock."

关于python - 使用网页抓取来检查商品是否有库存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64415735/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com