Scrapyを使ったスクレイピングのメモ その2
Scrapyを使ったスクレイプのやり方と、その流れと、雑多なメモその2
その1はこちら
Cookieの設定
Requestにcookiesとして受け口があるので、そこにdictで設定する。 楽ちん。 例のスクリプトは適当です。
def start_requests(self):
urls = [
'https://yahoo.co.jp'
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse, cookies=[{'name': 'yahooo', 'value': 'yaahooo', 'domain':'.yahoo.co.jp', 'path':'/'}]
リンクの追従
自分で書いたパーサー内部でパーサーを呼ぶといい感じにやってくれる。これも、わかりやすくて好き。 スクリプトはあくまで適当に書いてます。
#例として、search.yahoo.co.jpを取得し、
# div class="contents"の中身を取得
# a class="next" のリンクがあれば、そのリンクをもう一度取得する
def start_requests(self):
urls = [
'https://seach.yahoo.co.jp/realtime'
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
for i in response.css('div.contents'):
yield {
'href' : i.css('a').attrib['href'],
'title': i.css('a::text').get(),
'description': i.css('p.description::text').get()
}
next_page = response.css("a.next")
if len(next_page) > 0:
next_url = next_page.css('a').attrib['href']
#自分を参照することで、次のリンクを取得しに行くように書ける
yield scrapy.Request(next_url, callback=self.parse)
スクレイプするときやる手順
全体の流れとして、まずはscrapy shellを使ってパーサーを書く。 scrapy shellはインタラクティブに書けるので、xpath、cssのあたりを付ける。 shellである程度かけたら、個別のspiderにする。
ここまでがベースで、そこからは各自の環境ごとの要因が増えていく感じ。
取得したデータの扱い系はitems周りを見る(保存先の振り分けなどetc)
ルールベースでのリンクの抽出をもうちょっとうまく書きたいとき
大体のところの概要は把握できたとおもうので、、あとは使いたいところを深堀りしていこう。 後はbuildinservice周りを調べたい。