0

Django を使用して単純な (1 ページの) Web アプリケーションを作成し、alexa.com/topsites/global から上位 20 の Web サイトを参照したいと考えています。このページは、21 行 (1 つのヘッダーと 20 の Web サイト) と 3 つの列 (ランク、Web サイト、および説明) を持つテーブルをレンダリングする必要があります。

django を使用した私の知識は限られているため、可能であれば助けが必要です。

テンプレートを使用して、いくつかのブートストラップを使用してテーブルを作成しましたが、実際には、ランク/ウェブサイト名/および説明を解析する方法がわかりません。

誰かがいくつかの有用なウェブサイト/コードスニペットで私を正しい方向に導くことができますか?

HTMLParser次のようなものを使用して実装する必要があることを知っています。

from HTMLParser import HTMLParser

# create a subclass and override the handler methods
class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print "Encountered a start tag:", tag
    def handle_endtag(self, tag):
        print "Encountered an end tag :", tag
    def handle_data(self, data):
        print "Encountered some data  :", data

# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')

しかし、アプリケーションの要件でそれを使用する方法がわかりません。


だから、私はアップデートで戻ってきます。私はこれをやろうとしました(結果を印刷して、必要なものが得られるかどうかを確認するだけです)が、いくつかのリンクしか得られません。

助けはありますか?

import urllib2, HTMLParser

class MyHTMLParser(HTMLParser.HTMLParser):
    def reset(self):
        HTMLParser.HTMLParser.reset(self)
        #count div to get the rank of website
        self.in_count_div = False
        #description div to get description of website
        self.in_description_div = False
        #a tag to get the url
        self.in_link_a = False

        self.count_items = None
        self.a_link_items = None
        self.description_items = None

    def handle_starttag(self, tag, attrs):
        if tag == 'div':
            if('class', 'count') in attrs:
                self.in_count_div = True

        if tag == 'a':
            for name, value in attrs:
                if name == 'href':
                    self.a_link_items = [value,'']
                    self.in_link_a = True
                    break

        if tag == 'div':
            if('class', 'description') in attrs:
                self.in_description_div = True

    #handle data for each section
    def handle_data_count(self, data):
        if self.in_count_div:
            self.count_items[1] += data

    def handle_data_url(self, data):
        if self.in_link_a:
            self.a_link_items[1] += data

    def handle_data_description(self, data):
        if self.in_description_div:
            self.description_items[1] += data

    #endtag
    def handle_endtag(self, tag):
        if tag =='div':
            if self.count_items is not None:
                print self.count_items
            self.count_items = None
            self.in_count_div = False

        if tag =='a':
            if self.a_link_items is not None:
                print self.a_link_items
            self.a_link_items = None
            self.in_link_a = False


if __name__ == '__main__':
    myhtml = MyHTMLParser()
    myhtml.feed(urllib2.urlopen('http://www.alexa.com/topsites/global').read())
4

3 に答える 3

0

Scrapy でクローラーを構築し、毎日実行するように設定し、データベースにデータを保存して、Django で最新の結果が表示されるサイトを作成してみませんか。すべてPythonで。

于 2015-03-28T16:05:54.083 に答える