【问题标题】:Python3 JavaScript web scraperPython3 JavaScript 网络爬虫
【发布时间】:2017-10-23 21:56:39
【问题描述】:

Python3 是否有基于 JavaScript 的非 Selenium 抓取库?我正在尝试抓取https://www.mailinator.com/v2/inbox.jsp?zone=public&query=test,但收件箱中加载了 JavaScript。我不想使用 Selenium 的原因是我不希望它在运行时打开一个窗口。

这是我的非工作代码:

import requests
from bs4 import BeautifulSoup as soup
INBOX = "https://www.mailinator.com/v2/inbox.jsp?zone=public&query={}"
def check_inbox(name):
    stuff = soup(requests.get(INBOX.format(name)).text,"html.parser")
    print(stuff.find("ul",{"class":"single_mail-body"}))
check_inbox("retep")

是否存在这样的库?

在 Selenium 之外,我无法通过 Google 搜索 python 3 javascript scraper 找到任何内容。

【问题讨论】:

  • @Hum4n01d 这是python3,不是python。
  • 我不明白为什么会有所作为。
  • 语法不同,库不兼容
  • 好的,但总体而言,解决方案仍然是相同的。在开始抓取之前,您需要一个使用 JavaScript 呈现页面的库。

标签: python-3.x web-scraping


【解决方案1】:

实际上你不需要 javascript,因为它是客户端,所以你可以模拟它。

如果您检查网页(开发者工具 > 网络),您会看到有一个 websocket 连接到此:

wss://www.mailinator.com/ws/fetchinbox?zone=public&query=test

现在,如果您使用 python 实现一个 websocket 客户端,您将能够干净地获取您的邮件(参见:https://github.com/aaugustin/websockets/blob/master/example/client.py)。

编辑:

正如 John 所说,augustin 的 ws 客户端 repo 已死。 今天我会用这个:https://websockets.readthedocs.io/en/stable/

【讨论】:

  • 嗯...这对我不起作用 - websockets.exceptions.InvalidStatusCode: Status code not 101: 500
  • import websockets, asyncio from bs4 import BeautifulSoup as soup INBOX = "wss://www.mailinator.com/ws/fetchinbox?zone=public&query=test" async def hello(): async with websockets.connect(INBOX) as ws: response = await ws.recv() print(response) asyncio.get_event_loop().run_until_complete(hello())
  • 这是一个内部服务器错误。但这是另一个话题。我建议您对您正在尝试的内容以及为什么它不起作用提出另一个问题。我的猜测是,您必须发送一些标头(也许是 cookie)。您还应该查看源代码,看看他们如何进行 websocket 连接。也许你必须注册一个频道。另外,在询问社区之前尝试超过 5 分钟;)
  • 我注意到其中一个标题每次都在变化 - Sec-WebSocket-Key。我将如何生成其中之一?
  • @Loïc github 链接已损坏,您有可以添加到答案中的代码 sn-p 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
相关资源
最近更新 更多