【发布时间】:2020-12-04 00:22:26
【问题描述】:
我编写了一个(非常基本的)网络抓取工具,用于从 sam's club 网站抓取产品,然后打印出产品名称和产品价格。
问题在于 python 将相同的价格(页面上第一个产品的价格)打印到每个其他项目(即使名称相应地更改)。
如果我更改要抓取的页面,价格会更改为该页面上的第一个价格,然后将其标记为每个其他项目的价格。
我不明白为什么其他一切都在起作用,而不是产品价格?
(旁注:价格变量看起来不优雅且令人困惑,因为 sam's clube 在服务器端将其价格分解为 3 个字段。价格 = $,价格 2 = 美元,价格 3 = 美分)
感谢您的帮助,代码如下:
import requests, bs4
from bs4 import BeautifulSoup
#makes each request look like a human request
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Cookie': 'localeEditionShown_en=true; permutive-session=^%^7B^%^22session_id^%^22^%^3A^%^22e5386dfb-c58a-4882-b0e1-2cc2d9518982^%^22^%^2C^%^22last_updated^%^22^%^3A^%^222017-11-22T19^%^3A10^%^3A04.522Z^%^22^%^7D; visid_incap_774904=4xMirl1lRNOgrnN+Sm9S1zNx61kAAAAAREIPAAAAAACAsmaAAbBYMBjQTCqLf/D6wOVO4hdnKjIF; incap_ses_151_774904=/LX+SNRqsR8SzJi7p3YYAjKgGloAAAAApdQygw8VYBxbv/wvl7Be7A==; _gat=1; _gat_subdomainTracker=1; _ga=GA1.2.1522498341.1508602188; _gid=GA1.2.1243543827.1511694421'
}
#defines url and requests/beautifulsoup variables
url = "https://www.samsclub.com/s/gatorade"
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'lxml')
productlist = soup.find_all('div',class_='sc-pc-title-medium')
for products in productlist:
name = soup.find('div',class_='sc-pc-title-medium').text.strip()
price = soup.find('span', class_='Price-currency').text.strip()
price2 = soup.find('span', class_='Price-characteristic').text.strip()
price3 = soup.find('span', class_='Price-mantissa').text.strip()
productprice = price + price2 + '.' + price3 #need to find out why its not updating
results = {
'product name': products.text.strip(),
'product price': productprice
}
print(results)
【问题讨论】: