前提・実現したいこと
pythonのscrapyを使ったクローリングを勉強したくて下記のサイトを参考にチュートリアルを行いました。
しかし、pythonの基本文法も怪しいレベルでいじったため、動くんだけどドユコト?ってなってしまいました。そこでコードの理解が正しいか確認&わからないことの質問をさせてください。
python超初心者がスクレイピングしてみる
Python, Scrapyの使い方(Webクローリング、スクレイピング)
該当のソースコード(自分の解釈をコメントアウトで書いています)
spider
# -*- coding: utf-8 -*- import scrapy from tutorial.items import TutorialItem # この2文によってscrapyのフレームワークと、他の名前空間?(items.py)にある定義をこのファイルでも使えるようにする class QuotesSpider(scrapy.Spider): name = 'quotes' # ここよくわかりません。このnameどこで使ってます? allowed_domains = ['quotes.toscrape.com'] start_urls = ['http://quotes.toscrape.com/page/1/'] # allowed_domeinsでダウンロードするドメインの指定。念のため的な?start_urlsはダウンロードするページ def parse(self, response): # perseという関数の役割がよくわかりません。引数がself??これはページのurlでしょうか?responseはダウンロードしたページの情報が入っているという解釈で良いですか?? for quote in response.css('div.quote'): # response.css()でページの中でもさらに情報を絞ってそれをquoteにlistとして入れてる item = TutorialItem() # itemという空のlistを定義? item['author'] = quote.css('small.author::text').extract_first() item['text'] = quote.css('span.text::text').extract_first() item['tags'] = quote.css('div.tags a.tag::text').extract_first() # cssセレクターによって欲しい情報を入手! yield item # itemを返す # for文でこの動作を繰り返し、ページ上のquoteを全て取得 next_page = response.css('li.next a::attr(href)').extract_first() # ここで次ページのurl(/page/ページ数/)を取得 if next_page is not None: # 次ページが存在しない(最終ページ)の時は処理をやめるための文 next_page = response.urljoin(next_page) # urljoinによってresponseの中の情報のurlと今取得した次ページのurlを合体させてる?? yield scrapy.Request(next_page, callback=self.parse) # scrapy.Requestはどういう関数?ですか?また引数にnext_pageとcallback=self.perseここの引数、上のperseという関数にまた渡してる感じなんでしょうが、いまいちよくわかりません。
item.py
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy class TutorialItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() text = scrapy.Field() author = scrapy.Field() tags = scrapy.Field() #ここでスクレイピングで使う変数の定義をしてる
補足情報(FW/ツールのバージョンなど)
python3.5.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/19 12:06