私がしようとしているのは、会社情報(thisisavailable.eu.pn/company.html)をスクラップして、それぞれのデータを別々のページから取得します。Scrapyで複数のリンクされたページから1つのデータセットをクロールしてスクラップする方法
だから、理想的に、私はサンプルのページから戻ったデータは、次のようになります。
{
"company": "Mycompany Ltd",
"code": "3241234",
"phone": "2323232",
"email": "[email protected]",
"board": {
"1": {
"name": "Margaret Sawfish",
"code": "9999999999"
},
"2": {
"name": "Ralph Pike",
"code": "222222222"
}
}
}
私は検索しましたGoogleとSO(のようなhereとhereとScrapy docsなど)が、ために解決策を見つけることができませんでしたこのような問題。ラファエルは、最初の問題に気づいたよう :
items.py:
import scrapy
class company_item(scrapy.Item):
name = scrapy.Field()
code = scrapy.Field()
board = scrapy.Field()
phone = scrapy.Field()
email = scrapy.Field()
pass
class person_item(scrapy.Item):
name = scrapy.Field()
code = scrapy.Field()
pass
スパイダー/ example.py:
import scrapy
from try.items import company_item,person_item
class ExampleSpider(scrapy.Spider):
name = "example"
#allowed_domains = ["http://thisisavailable.eu.pn"]
start_urls = ['http://thisisavailable.eu.pn/company.html']
def parse(self, response):
if response.xpath("//table[@id='company']"):
yield self.parse_company(response)
pass
elif response.xpath("//table[@id='person']"):
yield self.parse_person(response)
pass
pass
def parse_company(self, response):
Company = company_item()
Company['name'] = response.xpath("//table[@id='company']/tbody/tr[1]/td[2]/text()").extract_first()
Company['code'] = response.xpath("//table[@id='company']/tbody/tr[2]/td[2]/text()").extract_first()
board = []
for person_row in response.xpath("//table[@id='board']/tbody/tr/td[1]"):
Person = person_item()
Person['name'] = person_row.xpath("a/text()").extract()
print (person_row.xpath("a/@href").extract_first())
request = scrapy.Request('http://thisisavailable.eu.pn/'+person_row.xpath("a/@href").extract_first(), callback=self.parse_person)
request.meta['Person'] = Person
return request
board.append(Person)
Company['board'] = board
return Company
def parse_person(self, response):
print('PERSON!!!!!!!!!!!')
print (response.meta)
Person = response.meta['Person']
Person['name'] = response.xpath("//table[@id='person']/tbody/tr[1]/td[2]/text()").extract_first()
Person['code'] = response.xpath("//table[@id='person']/tbody/tr[2]/td[2]/text()").extract_first()
yield Person
はUPDATEを、私は一緒に考え出すことができた何
許可されたドメインが間違っていた - 私はそれを今すぐコメントした、そして今私がそれを実行すると、(私はURLに低担当者のためにURLを追加する):
を閉じscrapyクロール例えば2017年3月7日午前9時41分12秒[scrapy.utils.log] INFO:Scrapy 1.3.2開始(BOT:proov)2017年3月7日午前9時41分12秒 [scrapy.utils.log] INFO:オーバーライドされた設定:{'NEWSPIDER_MODULE': 'proov.spiders'、 'SPIDER_MODULES':['proov.spiders']、 'ROBOTSTXT_OBEY':True、 'BOT_NAME': 'proov' } 2017-03-07 09:41:12 [scrapy.middleware]情報:有効な拡張子: ['scrapy.extensions.logstats.LogStats'、 'scrapy.extensions.telnet.TelnetConsole'、 'scrapy.extensions .corestats.CoreStats '] 2017-03-07 09:41:13 [scrapy.middleware] INFO:有効なダウンローダm iddlewares: [ '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-03-07 09:41:13 [scrapy.middleware] INFO:Enabledスパイダーミドルウェア: ['scrapy.spidermiddlewares .httperror.HttpErrorMiddleware」 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware' 'scrapy.spidermiddlewares.referer.RefererMiddleware' 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware' 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2017-03-07 09:41:13 [scrapy.middleware] INFO:有効なアイテムのパイプライン:[] 2017-03-07 09:41:13 [scrapy.core.engine] INFO:Spider 2017-03- 07 09:41:13 [scrapy.extensions。(scrap.extensions.telnet)DEBUG:Telnet console listening on:0個のアイテムを0個のアイテムで分けた2017-03-07 09:41:13 [scrap.extensions.telnet] 127.0.0.1:6023 2017-03-07 09:41:14 [scrapy.core.engine] DEBUG:クロール済み(404)http://*thisisavailable.eu.pn/robots.txt>(リファラー:なし) 2017-03-07 09:41:14 [scrapy.core.engine] DEBUG:クロール済み(200)http://*thisisavailable.eu.pn/scrapy/company.html>(リファラー:なし) person.html person2 .html 2017-03-07 09:41:15 [scrapy.core.engine] DEBUG:クロール済み(200)http://thisisavailable.eu.pn/person2.html> (referer:http:// * thisisavailable .eu.pn/company.html)PERSON !!!!!!!!!!! 2017-03-07 09:41:15 [scrapy.core.scraper] DEBUG:Scraped from http://*thisisavailable.eu.pn/person2.html> {'code':u'222222222 '、 '名前':u'Kaspar K \ xe4nnuotsa '} 2017-03-07 09:41:15 [scrapy.core.engine] INFO:クローズスパイダー(仕上げ)2017-03-07 09:41:15 [ [downloader/request_bytes]:936、 'downloader/request_count':3、 'downloader/request_method_count/GET':3、 'downloader/response_bytes':1476、 'downloader/request_count':3、 /response_count ':3、 ' downloader/response_status_count/200 ':2、 ' downloader/response_status_count/404 ':1、' finish_reason ': ' finished '、' finish_tim 'item_scraped_count':1、 'log_count/DEBUG':5、 'log_count/INFO':7、 'request_depth_max':datetime.datetime(2017,3,7,7,41,15,015,166,571000) 1、 'スケジューラー/デキュー':2、 'スケジューラー/デキュー/メモリ':2、 'スケジューラー/エンキュー':2、 'スケジューラー/エンキュー/メモリー':2、 'start_time' :datetime.datetimeの(2017、 3、7、7、41、13、404000)} 2017年3月7日午前9時41分15秒[scrapy.core.engine] INFO:スパイダー(完成)
"-o file.json"で実行する場合、ファイルの内容は次のとおりです。
[{ "コード": "222222222"、 "名": "ラルフ・パイク"}]
ので少しさらに、私は途方に暮れてまだ午前それを動作させるための方法。
誰かが私にこの仕事を手伝うことができますか?
おかげで、ラファエルをこするながらちょうど
Company
にフィールドとしてそれを使用し、それにdict
またはlist
を割り当てる:それは注意する必要があります質問。 – Esu