Python:通过xpath获取html表数据

2024-06-25

我觉得从 html 表中提取数据非常困难,并且需要为每个站点进行自定义构建。我非常希望在这里被证明是错误的。

是否有一种简单的 Pythonic 方法可以通过使用感兴趣的表的 url 和 xpath 从网站中提取字符串和数字?

Example:

url_str = 'http://www.fdmbenzinpriser.dk/searchprices/5/'
xpath_str = //*[@id="sortabletable"]

我曾经有一个可以从该站点获取数据的脚本。但丢了。我记得我使用的是标签 '' 和一些字符串逻辑..不是很漂亮

我知道像这样的网站事物说话 http://thingspeak.com可以做这些事情..


有一个相当通用的模式,您可以使用它来解析许多,但不是 所有,桌子。

import lxml.html as LH
import requests
import pandas as pd
def text(elt):
    return elt.text_content().replace(u'\xa0', u' ')

url = 'http://www.fdmbenzinpriser.dk/searchprices/5/'
r = requests.get(url)
root = LH.fromstring(r.content)

for table in root.xpath('//table[@id="sortabletable"]'):
    header = [text(th) for th in table.xpath('//th')]        # 1
    data = [[text(td) for td in tr.xpath('td')]  
            for tr in table.xpath('//tr')]                   # 2
    data = [row for row in data if len(row)==len(header)]    # 3 
    data = pd.DataFrame(data, columns=header)                # 4
    print(data)
  1. 您可以使用table.xpath('//th')查找列名称。
  2. table.xpath('//tr')返回行,对于每一行,tr.xpath('td')返回表示表的一个“单元格”的元素。
  3. 有时您可能需要过滤掉某些行,例如本例中的行 值比标题少。
  4. 您如何处理数据(列表列表)取决于您。这里我使用 Pandas 仅用于演示:

        Pris                               Adresse       Tidspunkt
0       8.04           Brovejen 18 5500 Middelfart   3 min 38 sek 
1       7.88         Hovedvejen 11 5500 Middelfart   4 min 52 sek 
2       7.88         Assensvej 105 5500 Middelfart   5 min 56 sek 
3       8.23    Ejby Industrivej 111 2600 Glostrup   6 min 28 sek 
4       8.15            Park Alle 125 2605 Brøndby  25 min 21 sek 
5       8.09           Sletvej 36 8310 Tranbjerg J  25 min 34 sek 
6       8.24      Vindinggård Center 29 7100 Vejle   27 min 6 sek 
7     7.99 *         Søndergade 116 8620 Kjellerup  31 min 27 sek 
8     7.99 *   Gertrud Rasks Vej 1 9210 Aalborg SØ  31 min 27 sek 
9     7.99 *              Sorøvej 13 4200 Slagelse  31 min 27 sek 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:通过xpath获取html表数据 的相关文章

  • 在java中将HTML转换为RTF?

    我需要将 HTML 转换为 RTF 我正在使用以下代码 private static String convertToRTF String htmlStr OutputStream os new ByteArrayOutputStream
  • 如何替换 CSS 表达式

    我有一个用于时间表条目的旧 ASP Web 应用程序 其中充满了 CSS 表达式 它们出现在 CSS 文件中 ApptPage position relative height expression Math max document bo
  • 映射 2 个数据帧并替换目标数据帧中匹配值的标头

    我有一个数据框 df1 SAP Name SAP Class SAP Sec Avi 5 C Rison 6 A Slesh 7 B San 8 C Sud 7 B df2 Name Fi Class Avi 5 Rison 6 Slesh
  • 为什么我的字符串中出现不需要的换行符?

    这应该很简单 这很愚蠢 但我无法让它发挥作用 我有一个在读取文件时定义的标头 if gene env in line or gene HIV2gp7 in line header line 现在这个标题看起来像 gt lcl NC 0018
  • PHP、MySQL 验证故障且搜索不起作用?

    我创建了一个小的注册粘性表格 一切工作正常 但如果我输入任何错误的值 例如姓名中的数字 年龄中的字母甚至错误的电子邮件格式 那么数据仍然保存在数据库中 我无法找出验证问题 另外一个是搜索选项 每当我在搜索框中输入任何名字或姓氏时 它都应该显
  • 如何为 PyYAML 编写代表程序?

    我想要一个自定义函数来序列化任意 python 对象 就像 json dump 函数有一个名为 default 的可选参数 如果对象不是 json 可序列化的 它应该是 json 转储器将调用的函数 我只是想从 json 包中执行相当于此操
  • 如何向 Jupyter (ipython) 笔记本自动添加扩展?

    我已经安装了扩展 calico document tools 我可以使用以下命令从 Jupyter 笔记本中加载它 javascript IPython load extensions calico document tools 如何为每个
  • python 函数中的对象不可迭代错误

    我有一个简单的功能如下 comdList range 0 27 for t in comdList print t 但是它返回一个 in object not iterable 错误 在函数之外它工作正常 这是怎么回事 尝试这个 for t
  • jQuery onclick 隐藏其父元素[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想隐藏 li tag on a 使
  • 在Python中将月份和年份的列合并为季度和年份的列

    我有一个数据框 df Month 1 8 Year 2015 2020 df pd DataFrame data df df 想要将其转变为新列 期望的输出 df Month 1 8 Year 2015 2020 Quarter Q1201
  • 如何在Python中将N毫秒添加到日期时间

    我正在设置一个日期时间变量 fulldate datetime datetime strptime date time Y m d H M S f 其中日期和时间是适合日期时间性质的字符串 如何将此日期时间增加 N 毫秒 Use timed
  • 将“http://”添加到尚未包含“http://”的 URL 前面

    我有一个input保存 URL 的字段 我希望这个保存的输入能够识别变量开头不存在 Http 但不知道从哪里开始 是否可以仅检查字符串的一部分 然后有一个在必要时追加的函数 如果您还想允许 https 我会使用如下正则表达式 if http
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value
  • Spacy-nightly (spacy 2.0) 问题“thinc.extra.MaxViolation 大小错误”

    显然成功安装了 spacy nightly spacy nightly 2 0 0a14 和英语模型 en core web sm 后 我在尝试运行它时仍然收到错误消息 import spacy nlp spacy load en core
  • 如何使用 GWT 创建可点击的链接?

    我想与 GWT 建立一些可点击的链接 我不确定这是否是最佳实践 基本上我想要类似这样的东西 如果我用 html 编写的话 a href index html alt Link a Use a 超级链接 http google web too
  • 将带有 rowspan 和 colspan 的 XHTML 表转换为 LaTeX

    我一直在寻找将 HTML 表格转换为 LaTeX 的合适解决方案 我发现以下问题与我的要求相似 XML 表到 LaTeX https stackoverflow com questions 27021926 xml table to lat
  • ValueError:序列太大;不能大于 32

    我写了这段代码 from Crypto Cipher import AES import numpy as np import cv2 base64 BLOCK SIZE 16 PADDING pad lambda s s BLOCK SI
  • 导入错误:无法导入名称

    我有一个名为 google translate python 的库 https github com terryyin google translate python https github com terryyin google tra
  • 获取 Flask 中没有端口的请求主机名

    我刚刚设法使用 Flask 获取我的应用程序服务器主机名request host and request url root 但这两个字段都返回请求主机名及其端口 我想使用仅返回请求主机名的字段 方法 而无需进行字符串替换 如果有 没有 We
  • 定义Python类时,如何在其中设置随机变量?

    假设我有一个名为Person 其中只有该人的姓名和性别 性别应从男性和女性中随机选择 为此 我导入random randint 功能 根据随机int确定随机性别 import random class Person alias random

随机推荐

  • C# Console.Writeline 和 .Write 差异

    我刚刚开始学习 C 有人向我指出 Microsoft 自己的开发网站提供绝对的初学者教程 以便我可以开始学习正确的语法 然而 在第一个教程挑战中 他们希望你打印控制台 This is the first line This is the s
  • 非常简单的自定义标签库功能不起作用

    我正在绞尽脑汁为什么我的自定义 taglib 函数不起作用 该示例正在使用Math cos and Math sin 这是课程 package foo tags public class Math public java lang Doub
  • 范围输入拇指随着时间的推移而偏移

    我查遍了 Stackoverflow 似乎所有带有拇指标签的范围滑块都有这个问题 例如 这个答案 https stackoverflow com a 35419875几乎没有 但仍然有 基本上你可以计算value max得到left范围值标
  • 自定义标记在某些设备上不显示(Google 地图 Android SDK)

    我在 Android 应用程序上使用自定义标记运行 Google Maps SDK 在我们的测试手机 S3 S5 和 DROID 上一切正常 但是 当我在 Nexus 5 硬件上运行该应用程序时 一种类型的自定义标记不再显示在地图上 虽然标
  • Microsoft Visual Studio 10.0\VC\include\io.h 提供了什么?

    我安装了 Visual Studio 2010 它给了我 C 编译器 C Program Files x86 Microsoft Visual Studio 10 0 VC vcvarsall bat 然而 当我尝试构建一个应用程序 一个P
  • AVR C++ uint32_t 奇怪的行为

    uint32 t a 65536 uint32 t b 1 lt lt 16 Why is a b在这里 但是 uint32 t a 65536 uint32 t b 65536 here a b尽管技术上应该是相同的 我使用 CLion
  • Play 框架使用复选框提交布尔值?

    使用 Play 2 3 x 我试图了解如何在表单中处理复选框 这个问题 https stackoverflow com questions 9499279 play framework checkbox processing对于旧版本的 P
  • 从 GCM/FCM 的生产证书添加 SHA-1

    我有一个使用 FCM 的应用程序 我已将程序包添加到 FCM 它显示 调试签名证书 SHA 1 可选 因此一切按预期工作 现在我正在准备发布 想知道我是否需要将此 SHA 1 证书更改为发布证书中的值 或者它不是必需的 并且在发布时我应该保
  • 未调用NotificationServiceExtension

    iOS 10发布后 我使用NotificationServiceExtension用于图像通知 效果很好 但最近我发现有些不对劲 UNNotificationServiceExtension 中的代码不再调用 我不确定原因 所以我创建了一个
  • JavaFx 无法正确渲染

    我的代码由两个类组成 一是 MainGUI java 二是 Screen java 我打算为不同的屏幕创建不同的类并在需要时渲染它们 这是我当前的代码MainGUI java import javafx application Applic
  • RSpec:重新打开类时存根 Rails.application.config 值不起作用?

    我在应用程序配置中定义了一个选项 我想要测试的类是在 gem 中定义的 不是我编写的 我想重新开课 Myclass class eval do if Rails application config myoption value1 some
  • 如何在reactjs中动态加载组件?

    我正在开发一个 Reactjs React motion 项目 在 模态窗口 比方说 中 我想动态安装或加载组件 如果可能的话 到目前为止我的解决方案 我找不到一种方法 所以看起来更容易将组件放置到位并隐藏它 然后在状态更改时切换类或样式
  • 如何将参数传递给 Flash 投影仪 (Windows)?

    有什么方法可以将命令行参数传递到 Windows 中的 Flash 投影仪吗 我有另一个应用程序 在本例中为安装程序 需要与 Flash 投影仪通信 与 flashvars 的工作方式相同 我无法在网上找到任何信息 一切似乎都集中在使用 F
  • Git 更新文件时更改默认 umask

    我的 Git 有问题 我在 Google 和 StackOverflow 中搜索了解决方案 但没有任何帮助 问题是 每次 git 更新工作目录中的某些文件时 当我签出分支或合并分支等时 文件权限都会更改 以便添加 可写到组 标志 如果该文件
  • SQL Case 语句会失败吗?

    有没有办法让 SQL 中的 CASE 语句像 C 中的 case 语句一样失败 我不想做的是下面的例子 但如果这是我唯一的选择 我想我会选择它 EXAMPLE NewValue CASE WHEN MyValue 1 THEN CAST M
  • 如何根据HTTP方法进行Zuul动态路由并通过“serviceId”解析目标主机?

    如何基于Zuul进行动态路由HTTP方式 获取 发布 放置 例如 当您需要路由POST请求给不同的主机而不是 中描述的默认值zuul routes zuul routes first service path first serviceId
  • CameraX 无法初始化

    我尝试使用CameraView 而且我是 Android 的初学者 我读了一些关于课堂的文章和信息 但我无法使其发挥作用 我有以下错误 原因 java lang IllegalStateException CameraX 未正确初始化 需要
  • 空气曲棍球比赛 - 如果移动太快,球员球棒会穿过冰球

    我目前正在 Unity3d 中开发一款空气曲棍球游戏 我遇到的问题是 当玩家试图太快地击球时 玩家最终会穿过冰球 因此不会发生碰撞 如果玩家保持静止并且冰球击中玩家 或者玩家以缓慢的速度击中冰球 则游戏将按预期完美运行 玩家拥有一个使用胶囊
  • CouchDB 中的 UUID

    我想知道 CouchDB 中默认表示的 UUID 格式 虽然 RFC 4122 描述了 UUID 例如550e8400 e29b 11d4 a716 446655440000 CouchDB 使用连续的字符 例如3069197232055d
  • Python:通过xpath获取html表数据

    我觉得从 html 表中提取数据非常困难 并且需要为每个站点进行自定义构建 我非常希望在这里被证明是错误的 是否有一种简单的 Pythonic 方法可以通过使用感兴趣的表的 url 和 xpath 从网站中提取字符串和数字 Example