Section 14 Grabbing URLs (Book Store)

Seleniumじゃない方法でスクレイピングをやる。

概要

titleとurlを取得→次のページに行く→各ページのデータ収集

各タイトルのURLを取得する。

最初にstartURLを設定する

start_urls = ['http://books.toscrape.com']

f:id:yukking3:20180517082219p:plain

titleに付いているURLを確認する。 f:id:yukking3:20180517082557p:plain

<a href="catalogue/a-light-in-the-attic_1000/index.html" title="A Light in the Attic">A Light in the ...</a>

上記の通りなっているので、次の順で各本のURLを取得する。
①booksに全ての('//h3/a/@href')のURLを入れる。
②for book in booksでabsolute_urlを生成する。
③各本のURLが出来上がる。
f:id:yukking3:20180517082645p:plain

NextボタンのURLを取得する。

検証で確認→shellで試す→urlをextractする→absoluteURLを作成する。

同じように検証で確認する。 f:id:yukking3:20180517083804p:plain shellで確認する。 f:id:yukking3:20180517084318p:plain absoluteURLを作る。 f:id:yukking3:20180517084306p:plain

本の詳細データを取得する。

各タイトルのURLを取得する→そこから更に詳細データを取得する
最終的なコードは以下の通り f:id:yukking3:20180517085303p:plain



cssセレクタでタイトルを取得する。

xpathcss selectorで取得できるか確認する。 f:id:yukking3:20180517085021p:plain

title = response.css('h1::text').extract_first()
価格の取得をやってみる。

検証で確認する。 f:id:yukking3:20180517085600p:plain shellで確認する。 f:id:yukking3:20180517085626p:plain

イメージの取得をやってみる。

イメージの取得は少々とトリッキーである。
基本的に要らない部分はリプレイスで消す。
検証で確認する。 f:id:yukking3:20180517085900p:plain shellで確認する。 f:id:yukking3:20180517085912p:plain 実際に取得すると

'../../media/cache/fe/72/fe72f0532301ec28892ae79a629a293c.jpg'

つまり、URLにするにはこの ( '../..' )部分をリプレイスしなければならない。 実際にやってみた f:id:yukking3:20180517090327p:plain

星の取得をやってみる。

検証する f:id:yukking3:20180517090439p:plain shellで確認する。 f:id:yukking3:20180517090546p:plain コードを作成する。 f:id:yukking3:20180517090626p:plain

Descriptionの取得をやる。

検証るす。 f:id:yukking3:20180517090830p:plain shellで確認する。 f:id:yukking3:20180517090816p:plain

テーブルにあるproduct_infoを取得する。

検証する f:id:yukking3:20180517092006p:plain

テキスト検索でデータ収集をする!

shellで確認する

response.xpath('//th[text()="' + value + '"]/following-sibling::td/text()').extract_first()

valueの部分をUPCとかTaxにする。 f:id:yukking3:20180517092706p:plain

コードにする。 f:id:yukking3:20180517091923p:plain テーブルの中に色々あるのでデータポイントを作る。 f:id:yukking3:20180517091940p:plain