【问题标题】:Download a page from the command line using tools like selenium, curl, wget, etc使用 selenium、curl、wget 等工具从命令行下载页面
【发布时间】:2022-01-16 05:11:27
【问题描述】:

过去几天我一直在尝试使用 wget 或 curl 等工具从下一页的命令行自动保存为表格或文本文件,但没有成功。问题还来自于 url 被屏蔽的事实。我想知道是否有可能使用 selenium 之类的工具来做到这一点。

https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en

在将页面保存为表格之前,基本上需要做两个操作:

a) 单击右下角的“20 个项目”,将其带到“100 个项目”

b) 点击页面中下方的“LOAD MORE”链接10次,以增加显示项目的数量

对于如何解决此任务的任何建议,我将不胜感激。 感谢您的考虑。

【问题讨论】:

  • 你试过puppeteer吗? github.com/puppeteer/puppeteer
  • @masterguru 感谢您的指出。看起来是个有趣的工具,但我想它的学习曲线相当陡峭。
  • @Cyrus。感谢您指出此资源,但他们的 API 仅允许获取单个项目的数据。因此,我需要拨打大约 1000 次电话才能获取我需要的所有物品,这对他们的系统造成了压力。

标签: selenium curl selenium-chromedriver wget geckodriver


【解决方案1】:

最简单的方法是使用剧作家 - https://playwright.dev/python/docs/intro

然后记录按钮点击 - 编剧codegen

保存页面内容/导出为pdf

您可以保存脚本,然后稍后重新运行 - python hkex.py

示例脚本

from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    # Open new page
    page = context.new_page()
    # Go to https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en
    page.goto("https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en")
    # Click #accpet_cookie_btn
    page.click("#accpet_cookie_btn")
    # Click text=20 Items
    page.click("text=20 Items")
    # Click :nth-match(:text("Items"), 4)
    page.click(":nth-match(:text(\"Items\"), 4)")
    # Click text=LOAD MORE
    page.click("text=LOAD MORE")
    # Click text=LOAD MORE
    page.click("text=LOAD MORE")
    # Click text=LOAD MORE 100 Items 20 Items 50 Items 100 Items
    page.click("text=LOAD MORE 100 Items 20 Items 50 Items 100 Items")
    # Click text=LOAD MORE
    page.click("text=LOAD MORE")
    # Click text=LOAD MORE
    page.click("text=LOAD MORE")
    # Click text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs
    page.click("text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs")
    # Click .back_to_top_btn
    page.click(".back_to_top_btn")
    # assert page.url == "https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en#hkex_page_header"
    # Click text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs
    page.click("text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs")
    # Click #lhkexw-equities div:has-text("FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ")
    page.click("#lhkexw-equities div:has-text(\"FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ\")")
    # Click #lhkexw-equities div:has-text("FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ")
    page.click("#lhkexw-equities div:has-text(\"FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ\")")
    # Click text=LOAD MORE
    page.click("text=LOAD MORE")
    # ---------------------
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)

【讨论】:

  • 看起来很有趣,但在这种情况下,我更喜欢学习曲线不那么陡峭的方法。无论如何,谢谢。
  • 我运行了你的脚本,它完成了我需要的一切,但没有将页面保存为表格或文本文件。是否可以通过添加此功能来完成您的脚本?再次感谢您的帮助和帮助。
猜你喜欢
  • 2015-10-04
  • 2017-10-22
  • 1970-01-01
  • 2018-08-06
  • 2021-06-28
  • 2013-05-05
  • 2019-05-30
  • 2018-04-25
  • 1970-01-01
相关资源
最近更新 更多