- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一些网络抓取代码从 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 。这是我们在该博客中抓取的网站:Most Popular Dog Breeds 。在那篇博文中,您必须按照自己的方式处理元素,创建一个字典,循环遍历表的每一行并将数据存储在每一列中,然后才能创建一个数据框。
使用 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 的解决方案相匹配。如果您正在查看上面链接中提供的 HTML,Dog Breeds ,并且您已为该链接运行网络驱动程序,您可以运行以下代码:
tbl = driver.find_element_by_xpath("//html/body/main/article/section[2]/div/article/table").get_attribute('outerHTML')
df = pd.read_html(tbl)
然后,只需几行代码,您就会看到一个非常漂亮的数据框:
在[145]中:df
输出[145]:
[ 0 1 2 3
0 品种 2015 2014 2013.0
1 猎犬(拉布拉多) 1 1 1.0
2 德国牧羊犬 2 2 2.0
3 猎犬 (金色) 3 3 3.0
4 斗牛犬 4 4 5.0
5 比格犬 5 5 4.0
我觉得这比按照博客的建议处理标签、创建字典并循环每一行数据要容易得多。这可能不是最正确的做事方式,我是 Python 新手,但它可以快速完成工作。我希望这对一些网络爬虫同行有所帮助。
关于python - 使用 Selenium Python 解析 HTML 并读取 HTML 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214702/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!