python - 如何解析 HTML 表格

标签 python django parsing rest

我有一个包含大约 50 个表格的 HTML 页面。每个表具有相同的布局,但具有不同的值,例如:

<table align="right" class="customTableClass">
<tr align="center">
<td width="25" height="25" class="usernum">value1</td>
<td width="25" height="25" class="usernum">value2</td>
<td width="25" height="25" class="usernum">value3</td>
<td width="25" height="25" class="usernum">value4</td>
<td width="25" height="25" class="usernum">value5</td>
<td width="25" height="25" class="usernum">value6</td>
<td width="25" height="25" class="totalnum">otherVal</td>
</tr>
</table>

我的REST 服务器 正在运行django/python 所以在我的urls.py 中我正在调用我的def parse_url(): 函数,显然我想在其中完成所有工作。我的问题是,就 python 而言,我几乎是个新手,所以真的不知道把我的代码放在哪里。我从 HTMLParser python 文档中获取了一些代码,并将其更改如下:

import urllib, urllib2
from django.http import HttpResponse
from HTMLParser import HTMLParser

    class MyHTMLParser(HTMLParser):
        def handle_starttag(self, tag, attrs):
            print "Encountered the beginning of a %s tag" % tag

        def handle_endtag(self, tag):
            print "Encountered the end of a %s tag" % tag

        def handle_data(self, data):
            HttpResponse("Encountered data %s" % data)


    def parse_url(request):
        p = MyHTMLParser()
        url = 'http://www.mysite.com/lists.asp'
        content = urllib.urlopen(url).read()
        p.feed(content)
        return HttpResponse('DONE')

这段代码目前没有输出任何有用的信息。它只是打印出 DONE,这不是很有用。

如何使用类方法,例如 handle_starttag()?当我使用 p.feed(content) 时,不应该自动调用这些吗??

基本上,我最终想要完成的是,当我转到 mysite.com/showlist 时,能够输出一个列表:

value1
value2
value3
value4
value5
value6

othervalue

这需要在循环中完成,因为每个表中大约有 50 个不同值的表。

感谢您帮助初学者!!

最佳答案

您正在将答案的开头打印到 stdout,而不是 django。以下是让 HTMLParser 执行您的命令的方法:

import urllib, urllib2
from django.http import HttpResponse
from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self, *args, **kwargs):
        self.capture_data = False
        self.data_list = []
        HTMLParser.__init__(self, *args, **kwargs)

    def handle_starttag(self, tag, attrs):
        if tag == 'td':
            self.capture_data = True

    def handle_endtag(self, tag):
        if tag == 'td':
            self.capture_data = False

    def handle_data(self, data):
        if self.capture_data and data and not data.isspace():
            self.data_list.append(data)

def parse_url(request):
    p = MyHTMLParser()
    url = 'http://www.mysite.com/lists.asp'
    content = urllib.urlopen(url).read()
    p.feed(content)
    return HttpResponse(str(p.data_list))

我建议将类放入 utils.py 文件中,并与 views.py 保存在同一文件夹中。然后将其导入。这将有助于通过仅包含 View 来使您的 views.py 易于管理。

关于python - 如何解析 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7381089/

相关文章:

python - 在Python中计算字符串中的重复字符

python - CPU : AbstractConv2d Theano optimization failed 上的 Theano CNN

java - 如何使用覆盖数组解析我的二维数组以查找字符?

c - 乱序解析 C 系列语言

python - Geektools 和 Python

python - 在 CherryPy 3.1 中提供静态文件 favicon.ico 和 robots.txt 时出现问题

django - Wagtail 每页用户权限

python - 在 Django Rest Framework 中访问 View 集中的请求对象和序列化程序?

python - Django - 将属性值传递给 TemplateView 中的 as_view

java - 如何使用java读取S3中存在的JSON文件