スクレイピングιょぅょ
正直手作業でちまちまやるのもめんどくさくなったのでプログラマらしく自動化させてみよう。
以下参考にしたURL群。
http://www.freia.jp/taka/blog/169
http://www.python.jp/doc/2.4/lib/urllib2-examples.html
http://d.hatena.ne.jp/yumimue/20080101/1199148663
http://d.hatena.ne.jp/a2c/20081028/1225128978
http://4topcoder.blogspot.com/2007/07/lxmlhtml.html
http://blog.cles.jp/item/2921
http://itpro.nikkeibp.co.jp/article/COLUMN/20080407/298191/?ST=develop&P=1
あとLive HTTP HeadersとFireBugもありがとう。
BeautifulSoup 3.1.0.1
cg-siteのポリゴンページのHTML食わすとエラーがでる。
Traceback (most recent call last): File "<stdin>", line 158, in <module> File "D:\Python26\Lib\site-packages\BeautifulSoup.py", line 1499, in __init__ BeautifulStoneSoup.__init__(self, *args, **kwargs) File "D:\Python26\Lib\site-packages\BeautifulSoup.py", line 1230, in __init__ self._feed(isHTML=isHTML) File "D:\Python26\Lib\site-packages\BeautifulSoup.py", line 1263, in _feed self.builder.feed(markup) File "D:\Python26\lib\HTMLParser.py", line 108, in feed self.goahead(0) File "D:\Python26\lib\HTMLParser.py", line 148, in goahead k = self.parse_starttag(i) File "D:\Python26\lib\HTMLParser.py", line 226, in parse_starttag endpos = self.check_for_whole_start_tag(i) File "D:\Python26\lib\HTMLParser.py", line 301, in check_for_whole_start_tag self.error("malformed start tag") File "D:\Python26\lib\HTMLParser.py", line 115, in error raise HTMLParseError(message, self.getpos()) HTMLParser.HTMLParseError: malformed start tag, at line 156, column 27
http://d.hatena.ne.jp/bgnori2/20090608/1244438675
うーんPython3でオミットされるライブラリを使ってたのでオミットされてない方に書き換えたってことか?
まぁ目的のHTML食わすことができないのでは問題外なのでlxmlを試す。
lxml 2.2.2
しゅ・・・しゅごい。
http://www.cg-site.net/products/23615のログイン時のHTMLを食わす。
ソース
from lxml.html import fromstring if __name__ == "__main__": f = open("cg-site.html", 'r') #ローカルに保存したHTMLファイル html = f.read() et = fromstring(html) name = [ t.strip() for t in et.xpath("//div[@class='floatleft textleft']/text()") ] print name[0] brief = [ t.strip() for t in et.xpath("//div[@class='floatleft textleft content_text']/text()") ] print "\n".join(brief) tags = [ t.strip() for t in et.xpath("//div[@id='tag_area']/a/text()") ] print "\n".join(tags)
出力
投稿:2009年06月29日 01:28 シンセ用に制作したミクです。 ポリゴンのチラツキが抑えられない・・・・orz まさか閲覧数が5000を超えるとは、思ってなかったです。 見てくれた方ありがとうございます。 LightWave Synthe シンセ 初音ミク
こんな木っ端コードで欲しい部分が簡単に抽出できる。