我需要从这个网站获取一个元素:https://channelstore.roku.com/en-gb/details/38e7b84fe064cf927ad471ed632cc3d8/vlrpdd2

Task image: task image

我试过这个代码:

import requests
from bs4 import BeautifulSoup
page = requests.get('https://channelstore.roku.com/en-gb/details/38e7b84fe064cf927ad471ed632cc3d8/vlrpdd2')
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify())

我得到了一个文档,但我只看到元数据,没有我预期的结果:

推荐答案

如果您判断您的浏览器Network Call(单击F12),您将看到数据是从以下位置加载的:

https://channelstore.roku.com/api/v6/channels/detailsunion/38e7b84fe064cf927ad471ed632cc3d8

enter image description here

因此,为了模拟响应,您可以向URL发送一个GET请求. 请注意,没有必要使用BeautifulSoup:

import requests


headers = {
    'authority': 'channelstore.roku.com',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'accept-language': 'en-US,en;q=0.9',
    'cache-control': 'max-age=0',
    'cookie': '_csrf=ZaFYG2W7HQA4xqKW3SUfuta0; ks.locale=j%3A%7B%22language%22%3A%22en%22%2C%22country%22%3A%22GB%22%7D; _usn=c2062c71-f89e-456f-9374-7c7767afc665; _uc=54c11aa8-597e-4155-bfa1-379add00fc85%3Aa044adeb2f02798a3c8335d874d49562; _ga=GA1.3.760826055.1671811832; _gid=GA1.3.2471563.1671811832; _ga=GA1.1.760826055.1671811832; _cs_c=0; roku_test; AWSELB=0DC9CDB91658555B919B869A2ED9157DFA13B446022D0100EBAAD7261A39D5A536AC0223E5570FAECF0099832FA9F5DB8028018FCCD9D0A49D8F2BDA087916BC1E51F73D1E; AWSELBCORS=0DC9CDB91658555B919B869A2ED9157DFA13B446022D0100EBAAD7261A39D5A536AC0223E5570FAECF0099832FA9F5DB8028018FCCD9D0A49D8F2BDA087916BC1E51F73D1E; _gat_UA-678051-1=1; _ga_ZZXW5ZLMQ5=GS1.1.1671811832.1.1.1671812598.0.0.0; _cs_id=8a1f1aec-e083-a585-e054-158b6714ab4a.1671811832.1.1671812598.1671811832.1.1705975832137; _cs_s=10.5.0.1671814398585',
    'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
}

params = {
    'country': 'GB',
    'language': 'en',
}

response = requests.get(
    'https://channelstore.roku.com/api/v6/channels/detailsunion/38e7b84fe064cf927ad471ed632cc3d8',
    params=params,
    headers=headers,
).json()

# Uncomment to print all the data
# from pprint import pprint
# pprint(response)

print(response.get("feedChannel").get("name"))
print("rating: ", response.get("feedChannel").get("starRatingCount"))

打印:

The Silver Collection Comedies
rating:  3

Python-3.x相关问答推荐

使用pybind11时,在sys.exit(0)处成功完成测试后,Python单元测试冻结

如何在matplotlib中显示次要刻度标签

查找值始终为零的行 pandas

Python-Django 设置 Pandas DataFrame 的多索引不会分组/合并最后一个索引

在Python中基于组/ID将两个数据帧进行映射,找出较接近的值

两个 y 轴在零处对齐的 plotly barplot

Python,Web 从交互式图表中抓取数据

提高时间复杂度的一些建议

为什么 Sympy 不能解决我的非线性系统? Python 解释器一直在执行,直到我终止进程

使用 python 正则表达式匹配日期

创建一个可旋转的 3D 地球

Python:如何判断一个项目是否被添加到一个集合中,没有 2x(hash,lookup)

使用 Sublime Text 3 在 Python 3 中打印 UTF-8

如何在 Python3 中添加带有标志的命令行参数?

Python heapify() 时间复杂度

为什么 2to3 将 mydict.keys() 更改为 list(mydict.keys())?

带百分号的 Python 字符串格式

什么是ANSI_X3.4-1968编码?

字典理解中的操作顺序

在 PyCharm 中配置解释器:请使用不同的 SDK 名称