【问题标题】:Extract HTML tags and data from text从文本中提取 HTML 标签和数据
【发布时间】:2015-07-17 15:13:06
【问题描述】:

我正在使用 Python 2.7 尝试对网站进行简单调用以提取 HTML 数据,我使用以下代码对其进行了管理。

import requests
from HTMLParser import HTMLParser

name = "Mark"
surname = "Jacobs"

def req_getPageHTML(nume, prenume):
    url = "http://sample.com/page.aspx&Name=" + name + "&surname=" + surname
    response = requests.get(url).text
    return response

page_code = req_getPageHTML(nume, prenume)

htmlp = HTMLParser()

print htmlp.feed(page_code)

接下来我想做的是以某种方式提取或解析这个UNICODE 响应(print type(page_code) 返回UNICODE)以某种方式从中提取一些信息。

具体来说,从我可以返回的下面的示例 HTML 中,我想提取值(在下面的 HTML 代码中略微插入的数字,并且还以 > 为前缀 - 这在 HTML 中不存在代码,只是为了方便大家识别)。

...
<tr class="tr1" OnClick="lockBac();">
    <td class="tdB" rowspan="2" nowrap="nowrap">1</td>
    <td class="tdB" rowspan="2" nowrap="nowrap">Jacobs D <br/>Mark</td>
    <td class="tdB" rowspan="2" align="Center">Math speciality</td>
    <td class="tdB" rowspan="2" align="Center">Advanced User</td>
        >   <td class="tdB" rowspan="2" align="Center">6.95</td>
        >   <td class="tdB" rowspan="2" align="Center">7.9</td>
        >   <td class="tdB" rowspan="2" align="Center">7.9</td>
    <td class="tdB" colspan="4" align="Center"></td>
    <td class="tdB" rowspan="2" align="Center">English</td>
    <td class="tdB" rowspan="2" align="Center">B2-B2-B2-B2-B2</td>
    <td class="tdB" colspan="3" align="Center">Mathematics MATH-INFO</td>
    <td class="tdB" colspan="3" align="Center">Informatics</td>
    <td bgcolor="lightgreen" class="tdB" rowspan="2" align="Center"></td>
    <td class="tdB" rowspan="2" align="Center">8.88</td>
    <td class="tdB" rowspan="2" align="Center">Success</td>
</tr>
<tr class="tr1" OnClick="lockBac();">
    <td class="tdB"></td>
    <td class="tdB"></td>
    <td class="tdB"></td>
    <td class="tdB"></td>
        >    <td class="tdB">9.35</td>
        >    <td class="tdB"></td>
        >    <td class="tdB">9.35</td>
        >    <td class="tdB">9.4</td>
    <td class="tdB"></td>
        >    <td class="tdB">9.4</td>
</tr>
...

这些数字代表的是考试成绩,我稍后会将其放入数据库中。

现在,我正在尝试寻找一种有效的方法来提取这些数字,因为我宁愿将解析文本以查找每个元素(手动使用 SUBSTR 等)作为最后一个选项。

我确实遇到了 HTMLParser,如您所见,它也被导入到我的代码中,但底部的 print 返回 None

我的印象是我可以使用这个库来解析从response 收到的文本,并且会有一种更简单的方法来指定标签 ID(或类似的东西)并从中提取相关信息(比如显示在HTMLParser examples section) 中,但我无法通过使用feed 方法获得所需的信息。

也许我没有正确理解这一点,也许我没有使用适当的工具,所以我也解释了我的目标。

如果能帮助我纠正或指出正确的方向,我将不胜感激。

【问题讨论】:

  • 顺便说一句,发现 Python 有一个 awesome 的方式来处理substring,只需指定类似page_code = page_code[page_code.index('tr class="tr1"')
  • @RishavKundu 做得很好,谢谢!

标签: python html python-2.7 unicode


【解决方案1】:

不确定如何使用您尝试过的方法,但我有不同的方法。

您可以获取lxml,这是一个有助于抓取 XML 和 HTML 的 Python 库。看来Requests 也会帮助这个项目。

page = requests.get('http://www.example.com')
tree = html.fromstring(page.text)

tree 变量现在包含所有 html 文档,您可以根据需要对其进行解析。使用 Xpath 会有类似

scores = tree.xpath('//td[@class="tdB"]/text()')

希望对您有所帮助。

source

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多