从文本中提取HTML标记和数据

时间:2015-07-17 15:13:06

标签: python html python-2.7 unicode

我使用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方法获得我想要的必要信息。

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

我很感激帮助纠正或指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

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

你可以抓住lxml,这是一个python库,可以帮助你抓取XML和HTML。似乎Requests也将有助于这个项目。

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

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

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

希望有所帮助。

source