質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

Q&A

解決済

2回答

605閲覧

Scrapyを用いてのスクレイピング

haduki08

総合スコア13

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

0グッド

1クリップ

投稿2017/10/23 08:41

編集2017/10/23 10:02

###前提・実現したいこと
Python2.7でScrapyをインストールしてWEBクロール&スクレイピングをしようと
思っています。

下記ページを参考に「グノシー」からの抽出は成功しました。
Scrapy + Scrapy Cloudで快適Pythonクロール+スクレイピングライフを送る

対象のサイトは下記なのですが
シェアハウス検索サイト「シェアシェア」
xPath、CSSセレクタの指定の仕方が知識と理解が足りなく苦戦しています。

まず、下記図の赤枠部分のテキストとURLを取得したいです。
イメージ説明

###該当のソースコード(\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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tell_k

2017/10/23 09:48

具体的に「何が」できなくて困っているか書いてもらえると回答がつきやすいと思います。
haduki08

2017/10/23 10:02

失礼しました。イメージ図を追加して、やりたいことを明記しました。
guest

回答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

haduki08

総合スコア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

tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haduki08

2017/10/23 23:07

tall_kさん ありがとうございます! 実行してみましたが、下記エラーが解消できません。 schemeがない?見つからない?と怒られているようなのですが・・・ 下記を参考にしましたが、解決できませんでした。 https://stackoverflow.com/questions/27272575/valueerror-missing-scheme-in-request-url-h-in-python https://stackoverflow.com/questions/34976240/scrapy-missing-scheme-in-request-url *************************************************************************** PS C:\Users\wada\shareshare> scrapy crawl share_share 2017-10-24 08:03:35 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: shareshare) 2017-10-24 08:03:35 [scrapy.utils.log] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'shareshare.spiders', 'SPIDER_MOD ULES': ['shareshare.spiders'], 'ROBOTSTXT_OBEY': True, 'BOT_NAME': 'shareshare'} 2017-10-24 08:03:35 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.logstats.LogStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.corestats.CoreStats'] 2017-10-24 08:03:35 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2017-10-24 08:03:35 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2017-10-24 08:03:35 [scrapy.middleware] INFO: Enabled item pipelines: [] 2017-10-24 08:03:35 [scrapy.core.engine] INFO: Spider opened 2017-10-24 08:03:35 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min ) 2017-10-24 08:03:35 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 2017-10-24 08:03:35 [scrapy.core.engine] ERROR: Error while obtaining start requests Traceback (most recent call last): File "c:\users\wada\documents\python27\lib\site-packages\scrapy\core\engine.py", line 127, in _next_request request = next(slot.start_requests) File "c:\users\wada\documents\python27\lib\site-packages\scrapy\spiders\__init__.py", line 83, in start_requests yield Request(url, dont_filter=True) File "c:\users\wada\documents\python27\lib\site-packages\scrapy\http\request\__init__.py", line 25, in __init__ self._set_url(url) File "c:\users\wada\documents\python27\lib\site-packages\scrapy\http\request\__init__.py", line 58, in _set_url raise ValueError('Missing scheme in request url: %s' % self._url) ValueError: Missing scheme in request url: h 2017-10-24 08:03:35 [scrapy.core.engine] INFO: Closing spider (finished) 2017-10-24 08:03:35 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'finish_reason': 'finished', 'finish_time': datetime.datetime(2017, 10, 23, 23, 3, 35, 863000), 'log_count/DEBUG': 1, 'log_count/ERROR': 1, 'log_count/INFO': 7, 'start_time': datetime.datetime(2017, 10, 23, 23, 3, 35, 850000)} 2017-10-24 08:03:35 [scrapy.core.engine] INFO: Spider closed (finished) ***************************************************************************
haduki08

2017/10/24 01:27

ありがとうございます。出来ました!! *************************************************************************** PS C:\Users\wada\shareshare> scrapy crawl share_share 2017-10-24 10:21:45 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: shareshare) 2017-10-24 10:21:45 [scrapy.utils.log] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'shareshare.spiders', 'SPIDER_MODULES': ['shareshare.spiders'], 'ROBOTSTXT_OBEY': True, 'BOT_NAME': 'shareshare'} 2017-10-24 10:21:45 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.logstats.LogStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.corestats.CoreStats'] 2017-10-24 10:21:46 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2017-10-24 10:21:46 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2017-10-24 10:21:46 [scrapy.middleware] INFO: Enabled item pipelines: [] 2017-10-24 10:21:46 [scrapy.core.engine] INFO: Spider opened 2017-10-24 10:21:46 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2017-10-24 10:21:46 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 2017-10-24 10:21:46 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://share-share.jp/robots.txt> (referer: None) 2017-10-24 10:21:46 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://share-share.jp/search/result/page=1> (referer: None) 2017-10-24 10:21:46 [scrapy.core.scraper] DEBUG: Scraped from <200 http://share-share.jp/search/result/page=1> {'title': u'\u30b9\u30bf\u30a4\u30ea\u30aa \u30a6\u30a3\u30ba \u4ee3\u5b98\u5c71', 'url': u'/house/detail/2439/'} #省略# : : #省略# 2017-10-24 10:21:46 [scrapy.core.scraper] DEBUG: Scraped from <200 http://share-share.jp/search/result/page=1> {'title': u'\u30de\u30fb\u30e1\u30be\u30f3\u81ea\u7531\u304c\u4e18/\u5973\u6027\u5c02\u7528 \u4eba\u6c17\u306e\u81ea\u7531\u304c\u4e18\u307e\u3067\u3059\u3050\uff01', 'url': u'/house/detail/613/'} 2017-10-24 10:21:46 [scrapy.core.engine] INFO: Closing spider (finished) 2017-10-24 10:21:46 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 454, 'downloader/request_count': 2, 'downloader/request_method_count/GET': 2, 'downloader/response_bytes': 107244, 'downloader/response_count': 2, 'downloader/response_status_count/200': 2, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2017, 10, 24, 1, 21, 46, 653000), 'item_scraped_count': 25, 'log_count/DEBUG': 28, 'log_count/INFO': 7, 'response_received_count': 2, 'scheduler/dequeued': 1, 'scheduler/dequeued/memory': 1, 'scheduler/enqueued': 1, 'scheduler/enqueued/memory': 1, 'start_time': datetime.datetime(2017, 10, 24, 1, 21, 46, 129000)} 2017-10-24 10:21:46 [scrapy.core.engine] INFO: Spider closed (finished) PS C:\Users\wada\shareshare> *************************************************************************** 次にScrapy Cloudでの実行が上手くいかないのですが 別途質問します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問