我目前正在通过“用Python自动化无聊的东西”学习Python。 我现在正在做网页抓取部分。你知道吗
我写的代码可以从一个网站上获得产品的价格。然而,当我在另一个网站上编辑一点代码时,它似乎不起作用,Beautiful Soup从CSS返回一个空列表。你知道吗
这是我的工作代码。你知道吗
import bs4, requests, re
def getPrice(productUrl):
res = requests.get(productUrl)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# Go through CSS and get price
source = soup.select('#product_addtocart_form > div.product-shop > div.details-info')
element = source[0].text.strip()
# Regex for getting the price from the rest of the CSS.
pattern = re.compile(r"""R([1-9]\d*)(\.\d\d)?(?![\d.])""")
# Get price from string using regex pattern
trueprice = re.split(pattern, element)
return("The product's price is : R " + trueprice[1])
product = "https://www.faithful-to-nature.co.za/green-home-paper-straws-in-compostable-bag"
weblink = getPrice(product)
print(weblink)
这是我为另一个不工作的网站编辑的代码。 我注释了一些代码,因为列表中没有数据时它不起任何作用。你知道吗
import bs4, requests, re
def getPrice(productUrl):
res = requests.get(productUrl)
res.raise_for_status() # Check for any errors in request
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# Go through CSS and get price
csssource = soup.select('#shopfront-app > div > div.grid-container.pdp-grid-container > div.grid-x.grid-margin-x > div > div > div > div > div.cell.medium-auto > div.pdp-core-module_actions_mdYzm > div.sf-buybox.pdp-core-module_buybox_q5wLs.buybox-module_buybox_eWK2S')
#element = csssource[0].text.strip()
# Regex for getting the price from the rest of the CSS.
pattern = re.compile(r"""R([1-9]\d*)(\.\d\d)?(?![\d.])""")
#trueprice = re.split(pattern, element)
#return("The product's price is : R " + trueprice[1])
print(csssource)
test1 = "https://www.takealot.com/lego-classic-basic-brick-set-11002/PLID53430493"
weblink = getPrice(test1)
print(weblink)
对于这两个站点,我都使用Chrome上的inspect方法获得了CSS选择器。我尝试使用更广泛的CSS选择器,但Beautiful Soup仍然返回一个空列表。你知道吗
如何让Beautiful Soup返回正确的列表/CSS选择器?你知道吗
嗨,我相信这个网站提供的是动态内容,所以你需要使用selenium,当我尝试只处理请求/b时,我也会得到空白列表。你也许可以使用你原来的css选择标准,但我选择了第五次货币出现的价格你试图得到。你知道吗
下载正确的gecko驱动程序并在脚本中设置路径。你知道吗
https://github.com/mozilla/geckodriver/releases
如果您查看浏览器中发生的请求,您会注意到站点是通过JSON从对https://api.takealot.com/rest/v-1-8-0/product-details/{product\u ID}的调用中获取其产品详细信息的?平台=桌面(例如https://api.takealot.com/rest/v-1-8-0/product-details/PLID53430493?platform=desktop)。你知道吗
因此,这个站点的另一个选择是自己调用API,而不是使用selenium。你知道吗
相关问题 更多 >
编程相关推荐