【问题标题】:urllib.request + BeautifulSoup cannot scrape certain page, instead scrape root pageurllib.request + BeautifulSoup 无法抓取特定页面,而是抓取根页面
【发布时间】:2017-06-12 09:08:38
【问题描述】:

我在从 http://csgo-stats.com/epsilon-/ 网址抓取信息时遇到问题,但由于网站处理事情的方式,BeautifulSoup 仅从根页面收集数据,即 http://csgo-stats.com强>

是否有重定向会绊倒 BS?我可以在 html 中看到 BS 输出它正在尝试加载我的数据,但 BS 捕获它的速度太快了:

<main class="site-content" id="content">
        <div class="loading-spinner" data-request="epsilon-" id="load">
            Loading
        </div>

这是我正在使用的代码,以备不时之需:

from urllib.request import urlopen
from bs4 import BeautifulSoup

url = "http://csgo-stats.com/Epsilon-/"
soup = BeautifulSoup(urlopen(url))
print(soup.prettify())

【问题讨论】:

  • 试试这个模拟浏览器并且应该完美执行javascript的:phantomjs.org
  • 或者你也可以use the Steam API directly
  • 请注意,在您收到答复后,无需在您的问题中编辑感谢。如果您发现了现有答案未涵盖的实质性内容,欢迎您创建自己的新答案。

标签: python web web-scraping beautifulsoup urllib


【解决方案1】:

【讨论】:

  • 老实说,我实际上并不知道 Steam API。我将通过使用它来绕过我的整个问题。谢谢你让我知道!我选择了您的答案作为解决方案,因为它最简单且正是我所需要的,没有任何额外的麻烦。谢谢!
【解决方案2】:

虽然大多数 http 内容库(漂亮的汤、请求等)都会为您提供页面源,但这并不是页面在浏览器中呈现后的外观。这与当今 HTML 代码的构建方式有关,这是因为大部分页面呈现发生在页面上的所有 JavaScript 都正常工作时。这正是您看不到“最终”内容的原因。

现在,如果您希望在播放完所有 JavaScript 音乐后以浏览器呈现的方式收集内容,那么您需要另一种 (python) 库,该库就是 Selenium。

更多关于 Selenium 的信息请访问:http://www.seleniumhq.org/

只是提醒你,硒是相当大的野兽,有很多毛茸茸的末端,但学习它是值得的(不仅仅是为了刮)

【讨论】:

  • 我一定会调查的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 2021-05-31
  • 2015-05-08
  • 2016-04-01
  • 1970-01-01
  • 2018-01-18
相关资源
最近更新 更多