首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中完成呈现后如何刮取网页的HTML内容

在Python中完成呈现后如何刮取网页的HTML内容
EN

Stack Overflow用户
提问于 2016-03-28 06:29:36
回答 1查看 2K关注 0票数 2

我现在的任务是刮一些流行的笑话网站。一个例子是一个名为jokes.cc.com的网站。如果您访问该网站,将光标悬停在页面左侧的“获取随机笑话”按钮之上,您将注意到它重定向到的链接将是jokes.cc.com/#

如果你等待一段时间,它会改变为一个正确的链接,在网站上显示实际的笑话。它将更改为jokes.cc.com/*legit joke link*

如果分析页面的HTML,您会注意到有一个带有class=random_link的链接(class=random_link),该链接的<href>将链接存储到页面希望重定向的随机笑话。在页面完全加载之后,您可以检查它。基本上,“#”被一个合法的链接所取代。

现在,这是我的代码,以刮掉HTML,就像我对静态网站所做的那样。我使用过BeautifulSoup库:

代码语言:javascript
运行
AI代码解释
复制
import urllib
from bs4 import BeautifulSoup

urlToRead = "http://jokes.cc.com";
handle = urllib.urlopen(urlToRead)
htmlGunk =  handle.read()
soup = BeautifulSoup(htmlGunk, "html.parser")
# Find out the exact position of the joke in the page
print soup.findAll('a', {'class':'random_link'})[0]

产出:#

这是预期的输出,因为我已经意识到,该页尚未完全呈现。

在等待了一段时间之后,或者在呈现完成之后,我如何刮掉页面。我需要使用像机械化这样的外部库吗?我不知道该怎么做,所以我们很感谢你的帮助/指导

编辑:通过在Python中使用PhantomJS和Selenium,我终于能够解决我的问题。以下是在呈现完成后获取页面的代码。

代码语言:javascript
运行
AI代码解释
复制
from bs4 import BeautifulSoup
from selenium import webdriver


driver = webdriver.PhantomJS() #selenium for PhantomJS
driver.get('http://jokes.cc.com/')
soupFromJokesCC = BeautifulSoup(driver.page_source) #fetch HTML source code after rendering
# locate the link in HTML
randomJokeLink = soupFromJokesCC.findAll('div', {'id':'random_joke'})[0].findAll('a')[0]['href']
# now go to that page and scrape the joke from there
print randomJokeLink #It works :D
EN

回答 1

Stack Overflow用户

发布于 2016-03-28 06:48:30

您要查找的数据是通过在页面加载时动态运行的JavaScript生成的。BeautifulSoup没有JavaScript引擎,所以不管等待多长时间,链接都不会改变。有一些Python库可以抓取和理解JavaScript,但您最好的选择可能是挖掘和计算网站上JS的实际工作方式。例如,如果他们的笑话是随机抽取的,那么它可能是像JSON这样的格式,Python可以很容易地解析这种格式。这将使您的应用程序比包含一个完整的脚本引擎更加轻量级。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36264427

复制
相关文章
如何在 React 中引入 less?
本文主要写如何在 React 中引入 less 。因为 less 和 css 非常像,因此很容易学习。而且 less 仅对 css 语言增加了少许方便的扩展,这就是 less 如此易学的原因之一。
子舒
2022/06/09
3.9K0
如何在页面中引入JS教程
须位于 <script> 与 </script> 标签之间,放置在 HTML 页面的 <body> 或者 <head> 标签中:
小小鱼儿小小林
2020/06/23
5.5K0
如何在小程序中引入自有 API?
自定义 API,顾名思义为开发者为满足自身需求而自己创建的一个 API。那么自己创建的这个 API 能起到什么效果和作用呢。
海岛船长加西亚
2022/03/24
7820
Swift 5.1 中引入的部分有用的新特性
Swift 5.1现在已经正式发布,尽管只是次要版本,它包含了大量的更改和改进。从基本的新功能,例如模块稳定性(使SDK供应商可以交付预编译的Swift框架)到所有SwiftUI以及其他功能的新语法功能。
韦弦zhy
2020/02/18
1.4K0
Swift 5.1 中引入的部分有用的新特性
如何在 Vue.js 中引入原子设计?
本文为翻译文章,原文链接: https://medium.com/@9haroon_dev/introducing-atomic-design-in-vue-js-a9e873637a3e
葡萄城控件
2023/10/25
2610
如何在 Vue.js 中引入原子设计?
react中setState是同步还是异步的
我们都知道,React框架是由数据来驱动视图变化的,基于状态的管理实现对组件的管理,也就是组件当中的state,通过setState方法来修改当前组件的state,以达到视图的变化。
OECOM
2020/07/01
1.3K0
让我们再探讨是【移动数据】还是【移动计算】
第一件事,是Spark 3.0 开始重构shuffle部分,用以支持remote shuffle。这意味着我们终于可以为shuffle专门准备一个存储集群了,比如一个单独的HDFS之类的。这是Spark架构前进的一小步,也是业界开始朝计算和存储分离走了坚实的一步。计算和存储分离的好处我们就不多讲,而计算和存储的分离的前提是内网速度要足够快,所以也意味着内网速度已经基本达到要求了。通过这个我是想告诉大家,内网已经足够快。就像5G足够快,会带来什么,很快就会有结果。
用户2936994
2022/07/21
4100
让我们再探讨是【移动数据】还是【移动计算】
FOC控制中的这个Bug是怎么引入的?
FOC作为BLDC和PMSM电机的高精度控制算法,受到越来越多工程师的喜爱和研究,而自ST公开电机控制SDK后,最近研究了下这个SDK,发现在不采集母线电压的时候,会出现BUG,电机无法启动。首先来看配置文件,如果是勾选母线电压
用户1605515
2020/03/31
8930
FOC控制中的这个Bug是怎么引入的?
React中的useState是同步还是异步的?
在上面的 console.log('count:', count);中,输出多少?
无道
2022/09/02
2.2K0
如何在git中创建新分支
介绍 Git 是一个开源版本控制系统,用于在软件开发过程中跟踪更改。它的相互独立的分支模型使其脱颖而出。分支可以基于以前版本的软件来保持当前进度的完整性,同时处理错误修复或新功能。 在本地创建 Git 存储库 要创建新的 Git 存储库,请在终端中输入以下命令: mkdir rumenz cd rumenz git init 这将在 rumenz 目录中创建并初始化一个新的 Git 存储库。创建一个新的降价文件并添加一行文本: echo This is a line of text > rumenz.md
入门笔记
2022/06/02
2.9K0
如何在python中引入高性能数据类型?
python 最大的优点之一是它可以广泛地选择模块和包。它们将 python 的功能扩展到许多流行的领域,包括机器学习、数据科学、web 开发、前端等等。其中最好的一个优点是 python 的内置 collections 模块。
AI研习社
2019/10/24
1.4K0
如何在python中引入高性能数据类型?
如何在HTTPS 网页中引入HTTP资源: Mixed Content?
由于第一次出现这个错误时是由于引入的jQuery造成,所以采用的是使用相同的协议(都采用HTTPS协议引入文件),或者将文件下载到项目中,也不存在HTTPS的问题。再次出现问题是由于使用百度地图的API,在引入js时已经给定了请求的协议是HTTP,所以最终采用了通过meta将http的不安全请求升级为https。
Rattenking
2021/01/29
3.5K1
白平衡——图像处理中的一种增强技术
俗话说,一张图胜过千言万语。但是,如果它传达的内容与我们想看的内容不符怎么办?我们确定它应该来自那个图像,但不幸的是它不是很明显。如果说,有可能从一幅图像中发现我们想要了解的背景,并且很可能在这一过程中获得一些额外的见解,那会怎么样?
小白学视觉
2022/02/09
4610
白平衡——图像处理中的一种增强技术
如何在vue组件中引入外部的css和js文件[通俗易懂]
在使用vue框架开发时,我们都知道一个组件中可以同时写HTML、css、js代码,只需三个标签而已,如下:
全栈程序员站长
2022/11/09
8.9K0
创新是一种能力?还是一种天赋?
我常常看到教别人创新思维文章跟视频,于是我便思考,创新思维是人人都具备的吗?创新是一种能力?还是一种天赋?
netkiller old
2022/03/30
6380
MySQL中SQL执行慢的一种可能的原因场景
同事反馈了一个问题,MySQL 5.7的环境中,这条SQL非常慢,test表就一万多数据,而且字段tid有索引,
bisal
2022/01/19
3880
傅盛:深度学习是一种新的思维方式
过去猎豹在安全和工具层面,抓住了上一个时代的大风口。如今这条赛道不再像以前那样野蛮生长。
IT阅读排行榜
2018/08/15
3470
Java 中是“值传递”还是“引用传递”?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
业余草
2019/10/25
7810
数据中台是真火还是炒作?
马云老师在2019年说了一段话,“很多人会把数据比作石油,我们现在搭建的数据中台,就是希望扮演发电厂的角色”,这一段话,现在被大众认为是“数据中台”这个概念的起源。
凯哥
2020/01/17
8590
数据中台是真火还是炒作?
点击加载更多

相似问题

R:从tibble中的data.frames列表中提取列

448

用不同列重新绑定data.frames的有效方法

45

R data.frames中常量列的提取

22

从R中的data.frames列表中提取?

14

如何比较R中不同data.frames中的两列

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文