Pythonは爬虫類を書きます。ホームページをキャプチャーしてHTMLを解析します。(改訂編)


転載:http://www.lovelucy.info/python-crawl-pages.html
1.htmlページを取得する
実は、一番基本的なのは駅をつかんで、二つの話でいいです。
import urllib2
content = urllib2.urlopen('http://XXXX').read()
2.解析html
SGMLParser
PythonはデフォルトでHTMLParserやSGMLParserなどの解像器を持っています。前者は本当に使いにくいです。SGMLParserでサンプルプログラムを書きました。
import urllib2
from sgmllib import SGMLParser
                                                           
class ListName(SGMLParser):
    def __init__(self):
        SGMLParser.__init__(self)
        self.is_h4 = ""
        self.name = []
    def start_h4(self, attrs):
        self.is_h4 = 1
    def end_h4(self):
        self.is_h4 = ""
    def handle_data(self, text):
        if self.is_h4 == 1:
            self.name.append(text)
                                                           
content = urllib2.urlopen('http://list.taobao.com/browse/cat-0.htm').read()
listname = ListName()
listname.feed(content)
for item in listname.name:
    print item.decode('gbk').encode('utf8')
簡単です。ここではListNameというクラスを定義して、SGMLParserの中の方法を継承します。変数を一つ使います。h 4はマーク判定を行います。htmlファイルのh 4タグは、h 4タグがあれば、ラベル内の内容をList変数nameに入れます。start_を説明しますh 4()とend_h 4()関数は、彼らの原型はSGMLParserのものです。
starttagname(self,atrs)end_tagname(self)
tagnameはラベルの名前です。たとえば
,    start_pre,  
に会ったらend_を呼び出します。preatrsをラベルとするパラメータは、[atribute,value],(atribute,value)という形で伝えられます。
出力:
女装紳士靴類バッグ下着アクセサリースポーツアウトドアジュエリー腕時計デジタル家電オフィススキンケア用品家居建材グルメお土産日百貨車バイク文化遊び当地生活バーチャル
pyQuery
pyQueryはjQueryのpythonでの実現であり、jQueryの文法でHTML文書を解析することができて、とても便利です。使用前にインストールが必要です。install pyqueryでいいです。
以下の例:
#coding=gbk
from pyquery import PyQuery as pyq
doc=pyq(url=r'http://list.taobao.com/browse/cat-0.htm')
cts=doc('.market-cat')
for i in cts:
    text=pyq(i).find('h4').text()
    text=text.encode('raw_unicode_escape').decode('GB18030', 'ignore')
    print '====',text ,'===='
    print '
'
Beautiful Soup
頭が痛い問題があります。ほとんどのホームページは標準通りに書かれていません。様々な意味不明なエラーがあるので、そのホームページを書いている人を探し出したいです。この問題を解決するために、有名なBeautiful Soupを選んで文書を解析することができます。
#coding=gbk
import urllib
import BeautifulSoup
url='http://list.taobao.com/browse/cat-0.htm'
webfile = urllib.urlopen(url)
webcontext = webfile.read()
soup = BeautifulSoup.BeautifulStoneSoup(webcontext)
htmldata = soup.findAll("h4")
for h4content in htmldata:
    h4content=h4content.string
    print h4content.encode('raw_unicode_escape').decode('GB18030', 'ignore')