JavaScript 在请求包中 python

JavaScript in requests package python

我想使用 Python 从站点获取文本。 但是站点使用 JavaScript 和请求包只接收 JavaScript 代码。 有没有不使用 Selenium 获取文本的方法?

import requests as r

a=r.get('https://aparat.com/').text

如果站点使用 javascript 加载内容,则 javascript 必须是 运行 才能获取内容。我 运行 不久前在做一些网络抓取时遇到了这个问题,最终使用了 Selenium。是的,它比 BeautifulSoup 慢,但它是最简单的解决方案。

如果您知道服务器的工作原理,您可以发送一个请求,它应该 return 包含某种内容(无论是 html、json 等)

编辑:加载开发者工具,转到网络选项卡并刷新页面。查找 XHR 请求及其使用的 URL。您或许可以根据需要使用这些数据。

例如,我找到了这些 URL:

https://www.aparat.com/api/fa/v1/etc/page/config/mode/full https://www.aparat.com/api/fa/v1/video/video/list/tagid/1?next=1

如果您在浏览器中导航到这些内容,您会注意到 JSON 内容,您也许可以使用它。我认为有些文本是用 Unicode 编码的,例如 \u062e\u0644\u0627\u0635\u0647 \u0628\u0627\u0632\u06cc -> خلاصه باوی

我不知道您可能使用的具体 python 实现。寻找支持发出 http 请求和接收数据的库。这样你就可以避免硒。但是您必须事先知道 URL。如上所示。

例如,我会这样做:

  1. 向您在开发人员工具中找到的 URL 发出 http 请求
  2. 对于 JSON 内容,使用 JSON 解析器在本地获取 table/array/dictionary。然后,您可以使用本机编程语言遍历它。
  3. 使用 unicode 解码器获取普通文本格式的文本,可能有一个库可以执行此操作,但是例如在 this website 上使用“Decode/Unescape Unicode 实体”我能够获取文本。

希望对您有所帮助。

示例代码:

import requests;

req = requests.get('https://www.aparat.com/api/fa/v1/video/video/show/videohash/IueKs?pr=1&mf=1&referer=direct')
res = req.json()

#do stuff with res
print(res)