scrapyを使っていたけど
なーかなかなかなか、これが難しいのなんの。
そして、フレームワークなのに
ドキュメントが全部英語!!!(;ω;)
※英語読めない、隊長が悪いけど
どうしても処理の中で、scrapyが取得したURLリンクを使って
別ページを同時処理にてクロールしたかったんだけど
うまくいかなくて、もう途中で別途クロールすればいいんじゃね?と思いました。
そこでであったのがこの「BeatifulSoup」
サードパーティらしいけど、結構使いやすそうなので使ってみた。
サイトからとってきます
$ curl 'http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/BeautifulSoup-3.2.1.tar.gz' >BeautifulSoup.tar.gz $ tar zxvf BeautifulSoup.tar.gz
テストしてみます。
$ python BeautifulSoup-3.2.1/BeautifulSoupTests.py .................................................................... ---------------------------------------------------------------------- Ran 68 tests in 0.153s OK
(`・ω・)b
使ってみる
# ここは任意で from mylib.BeautifulSoup import BeautifulSoup # Yahooのサイトを使います。 link = '/index.html' link_data = urllib.urlopen('http://www.yahoo.co.jp' + link) # BeatifulSoup()で、エレメント(?)化 soup = BeautifulSoup(link_data) # find()で、ulセレクターの'id=siteinfo' の箇所を取得 tag_lists = soup.find('ul', attrs = {'id' : 'siteinfo'}) tag_item = [] # findAll()で、liセレクター毎にリスト化 for tag_list in tag_lists.findAll('li'): # stringへ変更 tag_list = str(tag_list) if tag_list.startswith('<li><a href="'): # 前回の記事で発狂しそうだったところ tag_link = re.sub('.*\"(.+?)\".*', '\\1', tag_list) tag_text = re.sub('<li><a.+?>(.+?)<.*$', '\\1', tag_list) # TagItem() -> scrapy/items.py に記述された Feild() # TagItem() - tag_link() # - tag_text() tag_item = TagItem() tag_item['tag_link'] = tag_link tag_item['tag_text'] = tag_text return tag_item
これで、scrapyと併用にスクレイピングができた。
実はこのアイディア(?)は、Githubで外国人のリポジトリと
ずぅーーーっとにらめっこをして、探しだしました。
ありがとう!
そして、英語を勉強したほうが近道じゃないかな?と
最近思いはじめた隊長でした。