###前提・実現したいこと
Python2.7でScrapyをインストールしてWEBクロール&スクレイピングをしようと
思っています。
下記ページを参考に「グノシー」からの抽出は成功しました。
Scrapy + Scrapy Cloudで快適Pythonクロール+スクレイピングライフを送る
対象のサイトは下記なのですが
シェアハウス検索サイト「シェアシェア」
xPath、CSSセレクタの指定の仕方が知識と理解が足りなく苦戦しています。
###該当のソースコード(\shareshare\spiders\get_shareshare.py)
# -*- coding: utf-8 -*- import scrapy class shareshareSpider(scrapy.Spider): name = "share_share" allowed_domains = ["share-share.jp"] start_urls = ( 'http://share-share.jp/search/result/?limit=25&page=1&sort%5B1%5D=upd' ) def parse(self, response): for sel in response.css("div.result-list"): article = shareshareItem() article['title'] = sel.css("table > tbody > tr:nth-child(1) > td > div > h3 > a::text").extract_first() article['url'] = sel.css("div.result-list > table > tbody > tr:nth-child(1) > td > div > h3 > a::attr('href')").extract_first()
###試したこと
Google ChromeのデベロッパーツールからxPath、CSSセレクタ取得をして
何となくコーディング
###補足情報(言語/FW/ツール等のバージョンなど)
OS:windows10 64bit
言語:python2.7
FW:scrapy1.4
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/23 10:02
回答2件
0
下記2点を修正したら解決しました。
1.データ取得のループ処理を修正
2.start_urls がタプルになるように修正
# -*- coding: utf-8 -*- import scrapy from shareshare.items import shareshareItem class shareshareSpider(scrapy.Spider): name = "share_share" allowed_domains = ["share-share.jp"] start_urls = ( 'http://share-share.jp/search/result/page=1', ) def parse(self, response): # 1件のデータはtrタグの単位でまとまってる -> trタグを抽出 for d in response.css("div.result-list > table > tbody > tr"): article = shareshareItem() # tr タグの中から必要な情報を抽出する article['title'] = d.css("td > div > h3 > a::text").extract_first() article['url'] = d.css("td > div > h3 > a::attr('href')").extract_first() yield article
tell_kさん、ありがとうございました!!
投稿2017/10/24 02:40
総合スコア13
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
今の書き方だと、最初のデータしかスクレピングできないので、下記のようにして、一件づつループを回せるようにしてあげれば良いと思います。
python
1# 1件のデータはtrタグの単位でまとまってる -> trタグを抽出 2for d in response.css('div.result-list > table > tbody > tr'): 3 4 # tr タグの中から必要な情報を抽出する 5 title = d.css('td > div > h3 > a::text').extract_first() 6 url = d.css('td > div > h3 > a::attr("href")').extract_first()
投稿2017/10/23 12:20
総合スコア2120
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/23 23:07
2017/10/23 23:53
2017/10/24 01:27
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。