抓取网站时访问变量



我目前正在尝试抓取一个网站(下面的代码中的网址),但是当我拉出我要使用的html部分时,我得到的只是我正在寻找的信息的变量名称。当我手动检查页面的 html 时,变量的实际值存在,但我假设当我抓取页面时,我看到的只是引用其他地方变量的网站。

我希望有人可以帮助我尝试访问此信息。我尝试过使用硒抓取网站的 html,但是我似乎只是返回使用请求时抓取的相同 html(也许我做错了)。

这是我代码的改进版本:

import scrapy
from scrapy import Selector
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

url = 'https://groceries.aldi.ie/en-GB/drinks/Beer-Ciders?sortDirection=asc&page=1'
html = requests.get(url, headers=headers).content
sel = Selector(text=html)
html_info = (sel.xpath('//*[@id="vueSearchResults"]/div/div[1]/div/div[4]/a').extract())
print(html_info)

然后返回以下内容:

['<a data-qa="search-product-title" v-bind:href="Product.Url" v-bind:title="Product.FullDisplayName" v-bind:data-productid="Product.ProductId" data-oc-click="searchProductClick" class="p text-default-font"> {{Product.DisplayName}} </a>']

我想从中获取"产品.完整显示名称"的实际值。如果有人能指出我访问此变量信息的正确方向,或者一种抓取网站 html 的方法,我将不胜感激 - 正如浏览网页的用户所看到的那样。谢谢!

我认为您可以使用Scrapy或请求库,因为它们在下载页面时具有相同的目的。

本网站不通过单一API提供完整数据。您可以使用此网址https://groceries.aldi.ie/en-GB/drinks/Beer-Ciders?sortDirection=asc&page=1获取大部分数据,如产品名称,网址,图像和尺寸。 但是,对于价格和单价,您必须通过此API发送POST请求https://groceries.aldi.ie/api/product/calculatePrices以及传递请求标头和有效负载。

仅用于演示,以下代码将为您提供产品名称。同样,您可以遍历其他字段以获取数据。

法典

import requests
from lxml import html
import json
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

url = 'https://groceries.aldi.ie/en-GB/drinks/Beer-Ciders?sortDirection=asc&page=1'
response = requests.get(url, headers=headers)
tree = html.fromstring(response.text)
data = tree.xpath('//div[@class="products-search-results"]/@data-context')
product_name = json.loads(data[0])
for each_product in product_name['SearchResults']:
print(each_product['FullDisplayName'])

输出(截断)

American Style Premium Lager 4 X 500ml Brookston
Traditional Irish Cider Apple Cider 8 X 500ml Cullen's
Premium Lager 500ml San Marcos
Cider Apple 8 X 500ml Orchard Thieves
Hop House500ml Can 8 X 500ml Guinness

最新更新