Selenium 下载完整的 html 页面

2024-03-27

我正在学习使用 Python Selenium 和 BeautifulSoup 进行网页抓取。目前,我正在尝试抓取Google搜索趋势上的热门搜索http://www.google.com/trends/hottrends#pn=p5 http://www.google.com/trends/hottrends#pn=p5

这是我当前的代码。然而,我意识到完整的 html 没有下载,我只有最近几个日期的内容。我可以做什么来解决这个问题?

from selenium import webdriver
from bs4 import BeautifulSoup

googleURL = "http://www.google.com/trends/hottrends#pn=p5"

browser = webdriver.Firefox()
browser.get(googleURL)
content = browser.page_source

soup = BeautifulSoup(content)
print soup

用户通过单击向页面添加更多内容(之前日期的内容)<div onclick="control.moreData()" id="moreLink">More...</div>页面底部的元素。

因此,要获取您想要的内容,您可以使用 Selenium 单击id="moreLink"元素或执行一些 JavaScript 来调用control.moreData();循环中。

例如,如果您想获取早至 2013 年 2 月 15 日星期五的所有内容(对于加载的内容,每个日期似乎都存在这种格式的字符串),您的 python 可能如下所示:

content = browser.page_source
desired_content_is_loaded = false;
while (desired_content_is_loaded == false):
     if not "Friday, February 15, 2013" in content:
          sel.run_script("control.moreData();")
          content = browser.page_source
     else:
          desired_content_is_loaded = true;

EDIT:

如果您在浏览器中禁用 JavaScript 并重新加载页面,您将看到根本没有“趋势”内容。这告诉我,这些项目是动态加载的。这意味着,它们不是您打开页面时下载的 HTML 文档的一部分。 Selenium 的 .get() 会等待 HTML 文档加载,但不会等待所有 JS 完成。无法确定异步 JS 是否会在任何其他事件之前或之后完成。它在准备好后完成,并且每次都可能不同。这可以解释为什么您有时在致电时可能会收到全部、部分或没有内容browser.page_source因为这取决于异步 JS 此时的运行速度。

因此,打开页面后,您可以尝试等待几秒钟,然后再获取源代码 - 给加载内容的 JS 有时间完成。

browser.get(googleURL)
time.sleep(3)
content = browser.page_source
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium 下载完整的 html 页面 的相关文章

  • Pandas - 按每个可能的键组合聚合

    我有一个 DataFrame Pandas 我想通过 A B C 和 D 列的组合尽可能按数据进行分组 假设它具有以下形式 A B C D E F G 0 Y X Y Z 1 2 7 1 Y X Y Z 3 4 8 2 X Y U V 1
  • 使用 Tkinter 进行多线程 Python

    我用这些函数在画布上画小圆圈 这是绘制圆圈的函数 class Fourmis def init self can posx posy name radius self can can self largeur can int self ca
  • 在 Chaquopy 中转换数组和张量

    我该怎么做呢 我看到你的帖子说你可以将 java 对象传递给 Python 方法 但这不适用于 numpy 数组和 TensorFlow 张量 以下以及其各种变体是我尝试过的 但没有成功 double anchors new double
  • Windows 中的信号处理

    在Windows中 我试图创建一个等待SIGINT信号的python进程 当它收到SIGINT时 我希望它只打印一条消息并等待SIGINT的另一次出现 所以我使用了信号处理程序 这是我的 signal receiver py 代码 impo
  • CodingBat sum67:为什么这个解决方案是错误的?

    我正在解决以下codingbat问题 返回数组中数字的总和 但忽略以 6 开头并延伸到下一个 7 的数字部分 每个 6 后面至少有一个 7 如果没有数字则返回 0 sum67 1 2 2 5 sum67 1 2 2 6 99 99 7 5
  • 添加反斜杠而不转义[重复]

    这个问题在这里已经有答案了 我需要逃离 字符串中的 字符 问题是每当我string string replace 结果是 添加额外的反斜杠来转义原始反斜杠 如何删除这个多余的反斜杠 结果 仅显示 实际上字符串是 gt gt gt str g
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • Python ttk.combobox 强制发布/打开

    我正在尝试扩展 ttk 组合框类以允许自动建议 我到目前为止的代码运行良好 但我想让它在输入一些文本后显示下拉列表 而不从小部件的输入部分移除焦点 我正在努力解决的部分是找到一种强制下拉的方法 在 python 文档中我找不到任何提及这一点
  • Python Subversion 包装器库

    在颠覆的文档 http svnbook red bean com en 1 7 svn developer usingapi html svn developer usingapi otherlangs有一个从 Python 使用 Subv
  • set() 可以在 Python 进程之间共享吗?

    我正在 Python 2 7 中使用多重处理来处理非常大的数据集 当每个进程运行时 它会将整数添加到共享的 mp Manager Queue 中 但前提是其他进程尚未添加相同的整数 由于您无法对队列进行 in 式成员资格测试 因此我这样做的
  • cx_freeze:QODBC 驱动程序未加载

    我的 python 应用程序如下所示 test py from PyQt4 import QtCore from PyQt4 import QtGui from PyQt4 import QtSql import sys import at
  • 为什么 1.__add__(2) 不起作用? [复制]

    这个问题已经存在了 可能的重复 访问 python int 文字方法 https stackoverflow com questions 10955703 accessing a python int literals methods 在P
  • 显示多索引 pandas 数据帧的前 10 行

    我有一个多级索引 pandasDataFrame第一级在哪里year第二级是username 我只有一列已经按降序排序 我想显示每个索引级别 0 的前 2 行 我拥有的 count year username 2010 b 677 a 50
  • 如何判断Python对象是否是字符串?

    如何检查 Python 对象是否是字符串 常规字符串或 Unicode Python 2 Use isinstance obj basestring 对于要测试的对象obj Docs https docs python org 2 7 li
  • 使用每日频率格式化 x 轴

    我正在尝试获取每日数据图 我有 3 个月的数据 每天都很难指出 如何格式化 x 轴 以便我可以获得每个日期 可以使用以下命令更改主要刻度的频率set major locator mdates DayLocator interval 5 如下
  • 解释 scipy.stats.entropy 值

    我正在尝试使用scipy stats 熵来估计库尔巴克 莱布勒 KL 两个分布之间的散度 更具体地说 我想使用 KL 作为衡量标准来确定两个分布的一致性 但是 我无法解释 KL 值 例如 t1 numpy random normal 2 5
  • 我的 R 平方分数为负,但使用 k 倍交叉验证的准确度分数约为 92%

    对于下面的代码 我的 r 平方分数为负 但使用 k 折交叉验证的准确度分数为 92 这怎么可能 我使用随机森林回归算法来预测一些数据 数据集的链接在下面的链接中给出 https www kaggle com ludobenistant hr
  • Twitter 不再使用请求库 python

    我有一个 python 函数 它使用 requests 库和 BeautifulSoup 来抓取特定用户的推文 import requests from bs4 import BeautifulSoup contents requests
  • docker 中的 Capybara headless chrome 返回 DevToolsActivePort 文件不存在

    我正在尝试配置系统测试以使用硒中的无头铬 我有以下水豚配置 spec support capybara rb Capybara server puma Silent true RSpec configure do config config
  • 如何从 Python 脚本捕获 Curl 的输出

    我想使用curl查找有关网页的信息 但在Python中 到目前为止我有这个 os system curl head www google com 如果我运行它 它会打印出 HTTP 1 1 200 OK Date Sun 15 Apr 20

随机推荐

  • 使用应用程序包时,<1% 的用户遇到 UnsatisfiedLinkError

    我正在尝试使用新的 Android 应用程序包 我在我的设备上本地运行一些测试 一切正常 然而 一旦部署到生产中 我开始看到一些如下错误 java lang UnsatisfiedLinkError dalvik system PathCl
  • CommandLink 无法在延迟加载的 Primefaces Datascroller 上工作

    我遇到延迟加载问题Primefaces 数据卷轴 http www primefaces org showcase ui data datascroller loader xhtml成分 我有一个 jsf 页面 应该在页面加载时显示 10
  • 修复损坏的编码(使用 Python)

    我有一堆文本文件包含编码错误的韩语字符 具体来说 字符似乎是用 EUC KR 编码的 但文件本身是用 UTF8 BOM 保存的 到目前为止 我成功修复了一个文件 内容如下 使用 EditPlus 打开文件 它显示文件的编码是UTF8 BOM
  • 如何比较 BigDecimals 以使我的测试通过? [复制]

    这个问题在这里已经有答案了 我有以下同样奇怪的情况JUnit test 所以我有这个测试方法 Test public void getNavInfoTest throws ParseException TirAliquotaRamoI ex
  • 使用 HTTP 客户端的 Kerberos 连接

    我正在使用 Kerberos 身份验证编写 HTTP 连接 我有 HTTP 1 1 401 未经授权 您能建议我应该检查什么吗 我认为有一些诡计 但我没有看到 也许我应该将标头 WWW Authenticate 设置为 Negotiate
  • 在netsuite中添加新的事务状态

    我正在开发 netsuite 并希望为客户账单创建新状态 我想要的新状态是 注销 注销后状态显示 已全额付款 我希望它显示 注销 我找到了很多帮助将当前状态更改为另一个现有的默认状态 例如 让我们举个例子 以下是尝试查找待履行销售订单时要应
  • VSCode 自定义宏

    我目前正在尝试使用 VSCode 但我不知道如何正确定义宏并将它们绑定到特定的按键绑定 我习惯使用 Sublime text 并且我定义了一些宏 可以帮助我更快地打字并减少错误 我想要获得的宏如下 alt shift q 哪些类型 并将光标
  • 设置普通石墨烯嵌套查询

    我已经成功创建了一个响应的全石墨烯查询 query person id Mary id name 我现在想扩展它 以便能够循环遍历所有人并为每个人返回类似的数据 query people count allPersons name 我如何获
  • 文件 -----stdarg.h 和 float.h 没有这样的文件或目录吗?

    我正在 xcode 项目中使用 mm 扩展名上的一些文件来编译这些文件 在添加此编译器后 我们在构建设置中添加了 LLVM GCC 4 2 这显示了错误 Developer Platforms iPhoneSimulator platfor
  • 插入等值元素

    我目前正在研究二叉搜索树 我想知道如果您尝试插入与根具有相同值的元素 您会怎么做 它去哪里 BST的定义是它是有序集 因此不允许插入重复项 这通常是由于在 BST 之上构建了更复杂的结构 根据所需的行为 您可能希望在插入重复项时引发异常 错
  • PHP:从网站提取 HTML 数据[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将自定义日志发送到 Google Play 开发者控制台?

    我已将我的 Android 应用程序上传到谷歌游戏 我的应用程序运行良好 但在某些设备上 它存在一些问题 每当我的应用程序崩溃时 Google Play 开发者控制台都会收到该错误 就像是 java lang RuntimeExceptio
  • 当我在终端中创建新分支时,为什么图表不显示从主分支分支出来的新分支?

    当我在终端中创建一个名为 testing123 的新分支时 为什么 Sourcetree 中的图表不显示从主分支分支出来的新分支 Sourcetree 识别新分支 但它不会从图中的主分支分支出来 为什么会出现这种情况 如何使 Sourcet
  • 如何设置 NSTextView 的默认字体?

    我正在使用禁用 富文本 选项的文本视图来显示一些纯文本 我找不到设置默认字体的方法 如果我在 IB 中输入一些文本 无论如何我都不想要 我可以在 IB 界面中设置字体 但是当用户删除字体并开始键入时 文本会更改为不同的字体和大小 我在这里阅
  • 用 python 替换文件名字符

    我有一些代码将单词 manual 添加到一堆文件名的末尾 我需要更改脚本 以便删除文件名的最后两个字母 ES 然后将其替换为 ES Manual 例如 AC 5400ES txt gt AC 5400 ES manual txt 我如何将该
  • 无法通过 Microsoft Graph API(C# 控制台)发送电子邮件

    我按照这 2 个链接创建了一个控制台应用程序 用于使用 Graph API 发送电子邮件 Microsoft Graph API 无法发送电子邮件 C 控制台 https stackoverflow com questions 574112
  • Docker Buildkit --mount=type=cache 用于缓存 .NET 6 的 Nuget 包

    我写了一个Dockerfile使用 Docker buildx mount type cache设置缓存我的 NuGet 包以加快构建速度 正如所示 这似乎在 NET 5 中有效其他问题 https stackoverflow com qu
  • 嵌入到java中的网络浏览器[重复]

    这个问题在这里已经有答案了 可能的重复 有没有办法在Java中嵌入浏览器 https stackoverflow com questions 48249 is there a way to embed a browser in java 我
  • 如何在 For Each...Next 循环中获取对象的索引?

    我使用以下语法来循环列表集合 For Each PropertyActor As JCPropertyActor In MyProperty PropertyActors i IndexOf PropertyActor Next 如何获取循
  • Selenium 下载完整的 html 页面

    我正在学习使用 Python Selenium 和 BeautifulSoup 进行网页抓取 目前 我正在尝试抓取Google搜索趋势上的热门搜索http www google com trends hottrends pn p5 http