【问题标题】:Getting the html of a page that has a loading screen获取具有加载屏幕的页面的 html
【发布时间】:2020-06-09 02:26:11
【问题描述】:

我正在尝试获取 instagram 个人资料页面的 html,但是当我使用请求库时,它会获取加载屏幕的 html,并且我想要加载后页面的 html。 这是我的代码:

from bs4 import BeautifulSoup
import requests

source = requests.get("https://www.instagram.com/ethieen/").text
soup = BeautifulSoup(source,"lxml")
body = soup.find("body")

print(body.prettify())

【问题讨论】:

标签: python python-requests


【解决方案1】:

这边可能使用了JavaScript,所以你希望能用BeautifulSoup访问它,因为它不支持JavaScript。

要对此进行测试,您可以在浏览器中停用 JS,然后导航到该页面。加载的东西就是你可以通过 BeautifulSoup 访问的东西。

【讨论】:

  • 哦,你知道有一个图书馆可以帮助解决这个问题吗?
  • Selenium 可以做到。
  • 但是你知道 selenium 是否可以在不打开浏览器实际页面的情况下工作吗?我可能不得不使用它,但我也需要完美的性能,而浏览器可能没有那么好
  • 你可以在不显示浏览器的情况下启动 selenium,但在后台它仍然会使用它。因此你不会得到“完美”的表现。如果你需要下载很多页面,你可以尝试使用多线程(不确定 selenium 是否可以使用它,但我看不出有什么理由)。
  • 好的,谢谢,不是我需要使用多个页面,而是我使用我的旧笔记本电脑作为服务器,所以它很慢而且它无法处理很多请愿,那就是为什么我需要我能获得的最佳性能。但如果找不到另一种方法,我就试试这个。再次感谢
【解决方案2】:

此页面由 js (ajax) 加载。你可以用puppeteer来做到这一点

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.instagram.com/ethieen', {waitUntil: 'networkidle2'});
  await page.pdf({path: 'hn.pdf', format: 'A4'});

  await browser.close();
})();

【讨论】:

  • 但这不是用于 javascript 的吗?我正在使用 python
  • 我知道,但是自从 2 年以来,我想用 python 抓取单页应用程序,但我不能。同时尝试用 puppeteer 来做。它有效。
  • puppeteer 非常简单实用。因此,如果您可以轻松使用任何工具。和木偶师一起做
  • 我想如果我没有其他解决方案我可以尝试学习它,谢谢
  • 不客气。希望你能用python找到好的解决方案。
猜你喜欢
  • 2014-10-04
  • 2014-08-16
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
相关资源
最近更新 更多