gpt4 book ai didi

python - 无法抓取屏幕上不可见但属于 slider /轮播的一部分的数据

转载 作者:行者123 更新时间:2023-12-01 13:13:14 25 4
gpt4 key购买 nike

我无法在属于 slider /轮播的网站上抓取数据。当我运行我的脚本时,它只从 slider /旋转木马中抓取第一个项目。它不会遍历该轮播中的所有页面。

我要抓取的网站是:

www.yourstory.com

我的 Python 脚本:

soup = BeautifulSoup(response, 'html.parser')
divTag = soup.find_all("a", class_=['sc-VigVT', 'eJWBx'])

for tag in divTag:
tdTags = tag.find_all("h3", class_=['sc-jAaTju', 'iNsSAY'])

for tag in tdTags:
print(tag.text)

输出:

Kunal Bahl and Rohit Bansal reveal the inside story of the Snapdeal turnaround

有 7 个轮播项目,但我只能获得第一个。我无法从轮播/ slider 中的第 2 - 7 页获取数据。

请检查下图我指的是什么(红色圆圈):

enter image description here

最佳答案

轮播是使用在 JS 中硬编码的 JSON 数据从 Javascript 生成的。准确地说,此 JSON 是通过以下方式引入的:

window.__REDUX_STATE__= { ..... }

所以大概仅供引用,该站点使用 redux管理应用程序的状态

我们可以使用以下脚本提取此 JSON:

import requests
from bs4 import BeautifulSoup
import json
import pprint

r = requests.get('https://yourstory.com/')

prefix = "window.__REDUX_STATE__="
soup = BeautifulSoup(r.content, "html.parser")

#get the redux state (json)
data = [
json.loads(t.text[len(prefix):])
for t in soup.find_all('script')
if "__REDUX_STATE__" in t.text
]

#get only the section with cardType == "CarouselCard"
carouselCards = [
t["data"]
for t in data[0]["home"]["sections"]
if ("cardType" in t) and (t["cardType"] == "CarouselCard")
][0]

#print all cards
pprint.pprint(carouselCards)

#get the name, image path & link path
print([
(t["title"], t["path"], t["metadata"]["thumbnail"])
for t in carouselCards
])

JSON 在 home 字段中有一个 sections 数组。此部分对象包括一些具有 cardType 和值 CarouselCard 的对象,其中有您要查找的数据

另外,从 JSON 来看,Carousel 部分是这样开始的:

{
"type":"content",
"dataAPI":"/api/v2/featured_stories?brand=yourstory&key=CURATED_SET",
"dataAttribute":"featured",
"cardType":"CarouselCard",
"data":[]
}

所以我想您也可以使用 API 获取卡片:https://yourstory.com/api/v2/featured_stories?brand=yourstory&key=CURATED_SET

import requests

r = requests.get('https://yourstory.com/api/v2/featured_stories?brand=yourstory&key=CURATED_SET')

#get the name, image path & link path
print([
(t["title"], t["path"], t["metadata"]["thumbnail"])
for t in r.json()["stories"]
])

哪个更直接

关于python - 无法抓取屏幕上不可见但属于 slider /轮播的一部分的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58633524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com