我试图理解,当网站提供代码刮取值时,为什么Sam's Club网站刮取代码似乎在拾取N/A填充值
我在顶部提供了三个不同的URL,它们在不同程度上复制了这个问题
像Oreo和Reese这样的普通品牌搜索似乎运行得很好,但出于某种原因,有些商品在网站上有价格,代码在价格中填写N/a
然后,如果你尝试像#url3这样的苏打水整体分类搜索,超过一半的价格被填写为N/A
问题:
1。)为什么代码能够正确地抓取部分数据,而不是全部数据
2。)这是代码循环和填充N/A值方面的错误,还是因为山姆俱乐部的网站/服务器架构
提前感谢,代码如下:
import requests
import itertools
import pandas as pd
from bs4 import BeautifulSoup
url = "https://www.samsclub.com/s/oreo" #url1
#url = "https://www.samsclub.com/s/reeses" #url2
#url = 'https://www.samsclub.com/b/soda/2080101?xid=cat1499-beve_vnav_5_3' #url3
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'
}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'lxml')
product_names = [p.getText(strip=True) for p in soup.find_all("div", class_="sc-pc-title-medium")]
product_prices = [p["title"].split()[-1] for p in soup.find_all("span", class_="Price-group")]
results = {k: v for k, v in itertools.zip_longest(product_names, product_prices, fillvalue="N/A")}
for product, price in results.items():
print(product, price)
问题:
1。)为什么代码能够正确地抓取部分数据,而不是全部数据
你的意思是,例如,价格&;不适用值?嗯,你是对的,一些数据价格被正确地刮取了&;有些人不是&;这背后的原因实际上只是在代码或算法的刮程序
就这个例子来说。
现在,正如您在图像上看到的,这是不正确的,正如我应该说的,因为
Cola-Cola (12oz / 35pk)
不应该是$10.48
,它应该是N/A
或None
。现在再说一遍,为什么会发生这种情况?实际上,代码上没有错误(当您运行程序时,它可以正常工作),这只是编写算法来刮取此站点的方式,只是编写得不正确请在此处思考此代码&;它有什么作用?它只是得到了
product names
和product prices
对吗?就是这样!但是没有constraints
。现在我所说的constraints
是什么意思?有点像一个条件,例如,如果某个产品没有价格怎么办?它能做什么?基于这里的代码,它不会处理可能的结果,它只是根据它的class
得到它找到的任何东西&;以list
的形式返回给您,就是这样,程序实际上不会处理可能的结果,就像我所说的,如果没有价格(这就是为什么有时您会得到价格与站点不一致的数据)2.)在代码循环和填写N/A值方面,这是一个错误,还是由于山姆俱乐部的网站/服务器架构
我想说,这是一个错误,因为代码是如何循环以正确获取所有价格的。网站的服务器架构实际上没有太多的相关性,而更多的是在网站的html代码上,因为这是我们为了正确地刮取这些数据而主要关注的地方
现在,我认为另一个可能会陷入的问题是:
那么,这个网页抓取程序如何正确地抓取数据呢
你必须修复它,并对其进行一些更改,修复刮取算法,因为正如我在
3 urls
上进行一些测试运行时所观察到的那样,实际上你是正确的,它没有正确地获取数据,我建议它只是在刮取算法上,关于它如何刮取数据相关问题 更多 >
编程相关推荐