当前位置: 首页 > 面试题库 >

使用Selenium Python解析HTML并读取HTML表

葛意远
2023-03-14
问题内容

我正在将我的某些网络抓取代码从R转换为Python(我无法让geckodriver与R一起使用,但它与Python一起使用)。无论如何,我试图了解如何使用Python解析和读取HTML表。快速背景,这是我的R代码:

doc <- htmlParse(remDr$getPageSource()[[1]],ignoreBlanks=TRUE, replaceEntities = FALSE, trim=TRUE, encoding="UTF-8")

WebElem <- readHTMLTable(doc, stringsAsFactors = FALSE)[[7]]

我将HTML页面解析为doc对象。然后,我将以开始doc[[1]],并通过更大的数字,直到看到所需的数据。在这种情况下,我去看了想要doc[[7]]的数据。然后,我将读取该HTML表并将其分配给WebElem对象。最终,我将其转换为数据框并开始使用它。

所以我在Python中所做的是这样的:

html = None
doc = None
html = driver.page_source
doc = BeautifulSoup(html)

然后我开始玩,doc.get_text但是我真的不知道如何只获取想要查看的数据。我要查看的数据就像一个10x10矩阵。当我使用R时,我只会使用doc[[7]]该矩阵,几乎可以将它转换成数据帧。但是,我似乎无法使用Python做到这一点。任何建议将不胜感激。

更新:

我已经能够使用Python获取我想要的数据-我关注了此博客,以使用python创建数据框:Python Web-
Scraping
。这是我们在该博客中抓取的网站:最受欢迎的犬种。在那篇博客文章中,您必须逐步处理元素,创建字典,遍历表的每一行并将数据存储在每一列中,然后才能创建数据框。

使用R,我唯一需要编写的代码是:

doc <- htmlParse(remDr$getPageSource()[[1]],ignoreBlanks=TRUE, replaceEntities = FALSE, trim=TRUE, encoding="UTF-8")

df <- as.data.frame(readHTMLTable(doc, stringsAsFactors = FALSE)

有了这一点,我有了一个非常不错的数据框,我只需要调整列名和数据类型-只是该代码看起来像这样:

NULL.V1 NULL.V2 NULL.V3 NULL.V4 1 BREED 2015 2014 2013 2 Retrievers (Labrador) 1 1 1 3 German Shepherd Dogs 2 2 2 4 Retrievers (Golden) 3 3 3 5 Bulldogs 4 4 5 6 Beagles 5 5 4 7 French Bulldogs 6 9 11 8 Yorkshire Terriers 7 6 6 9 Poodles 8 7 8 10 Rottweilers 9 10 9

Python中没有可用的东西使它更简单吗,还是因为R是为数据帧构建的(至少在我看来是这样,但我可能是错的),所以在R中这只是更简单?


问题答案:

好的,经过一番艰苦的挖掘,我觉得我找到了一个很好的解决方案–与R匹配。如果您正在查看上面的链接Dog
Breeds中
提供的HTML ,并且正在运行该链接的网络驱动程序,则可以运行以下代码:

tbl = driver.find_element_by_xpath("//html/body/main/article/section[2]/div/article/table").get_attribute('outerHTML')

df = pd.read_html(tbl)

然后,仅需几行代码,您就会看到一个非常漂亮的数据框:

In [145]: df Out[145]: [ 0 1 2 3 0 BREED 2015 2014 2013.0 1 Retrievers (Labrador) 1 1 1.0 2 German Shepherd Dogs 2 2 2.0 3 Retrievers (Golden) 3 3 3.0 4 Bulldogs 4 4 5.0 5 Beagles 5 5 4.0

我觉得这比处理标记,创建字典和遍历博客所建议的每一行数据要容易得多。这可能不是最正确的处理方式,我是Python的新手,但它可以快速完成工作。我希望这可以帮助一些网络爬虫。



 类似资料:
  • 问题内容: 我正在寻找一种从网页中提取HTML片段并对该HTML片段执行一些特定操作的有效方法。 所需的操作是: 删除所有具有“隐藏”类别的标签 删除所有脚本标签 删除所有样式标签 删除所有事件属性(在 =“ ”上) 删除所有样式属性 我一直在使用HTML Parser (org.htmlparser)来完成此任务,并且能够满足所有要求,但是,我不觉得自己有一个优雅的解决方案。当前,我正在使用Cs

  • 本文向大家介绍使用PHP的HTML DOMDocument解析HTML,包括了使用PHP的HTML DOMDocument解析HTML的使用技巧和注意事项,需要的朋友参考一下 可以通过以下代码获取<div>标记内的<div>标记内的文本,其中<div>内的class =“ main”内- 示例 输出结果 这将产生以下输出-

  • 我在使用jsoup(Java)解析html文档时遇到了一个问题。我正在分析的HTML具有以下格式: 我想在两个“hr”标记之间隔离HTML文本。我正在尝试以下代码: 系统出来println(对象); 但是ArrayList没有包含我想要的内容,我不知道如何解决它。(我是否可以将“hr”标记转换为“hr”文本“/hr”标记)?

  • 我想解析出这个Nasa页面上的描述,页面底部的文字 我该怎么做?

  • 这是一个概念性的问题,因为我试图理解在react中处理表格数据的最佳方法,而不使用任何特殊组件或库。 我在子组件中动态创建的html表中有数据。数据来自父组件。有些列具有可编辑的内容,我通过“编辑”按钮触发这些内容,以重新呈现表格的一个版本,该版本包含可编辑列的所有行的内联文本框。 当我更改文本框的内容时,我希望能够单击“保存”按钮并保存所有行。 “保存”和“编辑”按钮不在表中内联,而是位于我的组

  • 主要内容:Jsoup 使用DOM解析HTML 语法,Jsoup 使用DOM解析HTML 说明,Jsoup 使用DOM解析HTML 示例以下示例将展示在将 HTML 字符串解析为 Document 对象后如何使用类似 DOM 的方法。 Jsoup 使用DOM解析HTML 语法 document : 文档对象代表 HTML DOM。 Jsoup : 解析给定 HTML 字符串的主类。 html : HTML 字符串。 sampleDiv : 元素对象表示由 id“sampleDiv”标识的 html