2012-02-26 15 views
2

私は定期的に読んでいる音楽ウェブサイトがあり、ユーザーが自分の架空の音楽関連の記事を投稿するセクションがあります。常にコンベンションに従った91部のシリーズがあります(長時間にわたって書かれ、パートごとにアップロードされています)。 http://www.ultimate-guitar.com/columns/fiction/riot_band_blues_part_#.htmlです。Python HTML - 属性別に要素を取得

私はすべての部分から書式設定されたテキストを取得し、それを1つのhtmlファイルに入れたいと思っています。

便宜上、私の目的のために正しくフォーマットされた印刷版へのリンクがあります。私がする必要があるのは、すべてのパーツをダウンロードしてファイルにダンプするためのスクリプトを書くことだけです。難しくない。

次のように残念ながら、印刷版のURLは次のとおりです。何に対応してどのような記事を知るため www.ultimate-guitar.com/print.php?what=article & ID = 95932

唯一の方法IDフィールドは、元の記事の特定の入力タグの値属性を見ることです。

Go to each page, incrementng through the varying numbers. 

Find the <input> tag with attribute 'name="rowid"' and get the number in it's 'value=' attribute. 

Go to www.ultimate-guitar.com/print.php?what=article&id=<value>. 
Append everything (minus <html><head> and <body> to a html file. 

Rinse and repeat. 

これが可能である:

は、私は何をしたい、このですか?そしてPythonは適切な言語ですか?また、どのdom/html/xmlライブラリを使うべきですか?

ありがとうございました。

答えて

0

実際にこれはjavascript/jqueryでこれほど問題なく実行できます。 javascripty、擬似コード空のドキュメントに追加するには、:ロードが完了

for(var pageNum = 1; i<= 91; i++) { 
    $.ajax({ 
     url: url + pageNum, 
     async: false, 
     success: function() { 
      var printId = $('input[name="rowid"]').val(); 
      $.ajax({ 
       url: printUrl + printId, 
       async: false, 
       success: function(data) { 
        $('body').append($(data).find('body').contents()); 
       } 
      }); 
     } 
    }); 
} 

した後、あなたは、ファイルへの結果のHTMLを救うことができます。

import lxml.html 
import urllib2 

#implement the logic to download each page, with HTML strings in a sequence named pages 
url = "http://www.ultimate-guitar.com/print.php?what=article&id=%s" 

for page in pages: 
    html = lxml.html.fromstring(page) 
    ID = html.find(".//input[@name='rowid']").value 
    article = urllib2.urlopen(url % ID).read() 
    article_html = lxml.html.fromstring(article) 
    with open(ID + ".html", "w") as html_file: 
     html_file.write(article_html.find(".//body").text_content()) 

編集:lxmlのとurllib2ので

+0

これはクロスドメインとみなされ、ブラウザのセキュリティ目的では機能しません。 – Vigrond

+0

True。いくつかの変更を加えたgreasemonkeyスクリプトとして動作します。 – beerbajay

1

これを実行すると、いくつかのUnicode文字がページ内に存在しているようです。この問題を回避する方法の1つは、article = article.encode("ascii", "ignore")を実行するか、encodeメソッドを.read()の後に置いて、ASCIIを強制してUnicodeを無視することです。ただしこれは怠惰な修正です。

これは、bodyタグ内のすべてのテキストコンテンツを必要としていることを前提としています。これにより、PythonファイルのローカルディレクトリにstoryID.htmlのフォーマット(したがって「95932.html」)のファイルが保存されます。必要に応じて保存セマンティクスを変更します。

関連する問題