网页上的数据似乎是动态加载的,但存在于源页面中并且无法通过html请求获取

问题描述 投票:0回答:1

我一直在尝试搜索电影标题这里并获取每个结果的数据。我需要的数据存储在最终 HTML 文档的“item_small”类中。我尝试通过 Python 库 requests、requests_html、Selenium 和 BeautifulSoup 获取这些数据,但没有成功。

使用 DevTools 时,我可以看到,一旦我使用搜索栏(假设我搜索“玩具总动员”),就会将一个发布请求发送到带有负载的

url = 'https://www.spio-fsk.de/?seitid=491&tid=70'

query_params = {'seitid': '491', 'tid': '70'}
form_data = {'currpage': '', 'beginnt': '0', 'titel': 'Toy Story', 'filmart': '', 'verleiher': '', 'fsknr': '', 'datvon': '2024-02-07', 'datbis': '2024-02-07', 'db': '', 'sortaz': '0', 'submit_suche': 'Suche starten'}

响应是一个 HTML 文档,然后引发许多其他 .css、.js 等请求。如果我像往常一样运行

session = requests.Session()
r = session.post(url, params=query_params, data=form_data)
soup = BeautifulSoup(r.content, 'html.parser')

汤没有“item_small”类的实例。我怀疑这是一个动态网页,发生的情况是加载“初始”HTML 页面,然后我在最终网页中看到的其余数据(例如“item_small”类)由以下内容填充随后的 .css、.js 等请求。所以我尝试了以下方法:

session = requests_html.HTMLSession()
r = session.post(url, params=query_params, data=form_data)
r.html.arender()
soup = BeautifulSoup(r.html.html, 'html.parser')

但我仍然没有看到“item_small”类出现,并且我需要的数据都不存在。我怀疑这可能不是一个动态网页,因为在查看源页面(即 view-source:url)时,我仍然可以看到所有包含所有数据的“item_small”类。但如果情况并非如此,我真的不确定如何解决这个问题。

python html web-scraping python-requests
1个回答
0
投票

要从页面获取电影的标题,您可以使用以下示例:

import requests
from bs4 import BeautifulSoup

url = "https://www.spio-fsk.de/?seitid=491&tid=70"

payload = {
    "currpage": "",
    "beginnt": "0",
    "titel": "Toy Story",
    "filmart": "",
    "verleiher": "",
    "fsknr": "",
    "datvon": "2024-02-07",
    "datbis": "2024-02-07",
    "db": "",
    "sortaz": "0",
    "submit_suche": "Suche starten",
}

soup = BeautifulSoup(requests.post(url, data=payload).content, "html.parser")

for t in soup.select("h1.title"):
    print(t.get_text(strip=True))

打印:

A Toy Story: Alles hört auf kein Kommando
A Toy Story: Alles hört auf kein Kommando digitaler Bonus
A Toy Story: Alles hört auf kein Kommando (Titel nicht final)
A Toy Story: Alles hört auf kein Kommando - TLR Buzz Buzz
A Toy Story: Alles hört auf kein Kommando - UCI Gewinnspieltrailer
A Toy Story: Alles hört auf kein Kommando
A Toy Story: Alles hört auf kein Kommando TLR-Y
A Toy Story: Alles hört auf kein Kommando TLR-K
A Toy Story: Alles hört auf kein Kommando TLR-W
A Toy Story: Alles hört auf kein Kommando TLR-S "Handy aus"
© www.soinside.com 2019 - 2024. All rights reserved.