【发布时间】:2021-04-10 02:34:24
【问题描述】:
我正在搜索一个杂货店网站 (https://www.paknsaveonline.co.nz),以便在购物前做一些膳食计划。产品的价格因商店的位置而异。我想从本地商店(奥尔巴尼)提取价格。
我是网络抓取的新手,但我假设我的代码必须
- 将默认商店更改为我的本地商店(奥尔巴尼,使用此网址:https://www.paknsaveonline.co.nz/CommonApi/Store/ChangeStore?storeId=65defcf2-bc15-490e-a84f-1f13b769cd22)
- 维护一个请求“会话”,以确保我从同一个商店站点抓取我的所有产品。
我的抓取代码成功抓取了西兰花的价格,但价格与我当地商店的价格不一致。在发布我的西兰花刮刀价格为 1.99 美元时,但当我在奥尔巴尼商店手动查看价格时,价格为 0.99 美元。 我假设我切换到正确商店的代码没有按预期工作。
谁能指出我做错了什么并提出解决方案?
环境详情:
- 请求==2.23.0
- beautifulsoup4==4.6.3
- Python 3.7.10
下面的代码,以及指向 Google Colab 文件的关联链接。
import requests
from bs4 import BeautifulSoup as bs
import re
dollars_pattern = '>([0-9][0-9]?)'
cents_pattern = '>([0-9][0-9])'
url = 'https://www.paknsaveonline.co.nz/CommonApi/Store/ChangeStore?storeId=65defcf2-bc15-490e-a84f-1f13b769cd22'
header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest"} }
with requests.session() as s:
#I assume this url changes the store (200 response)
s.get(url)
#use the same session to return broccoli price
r = s.get('https://www.paknsaveonline.co.nz/product/5039956_ea_000pns?name=broccoli')
soup = bs(r.content,'html.parser')
cents = str(soup.find_all('span', {'class': "fs-price-lockup__cents"}))
dollars = str(soup.find_all('span', {'class': "fs-price-lockup__dollars"}))
centsprice =re.findall(cents_pattern, cents)
dollarsprice = re.findall(dollars_pattern, dollars)
print(dollarsprice, centsprice)
【问题讨论】:
标签: python-3.x web-scraping beautifulsoup python-requests