私はウェブサイトのscrapy
"クリック"のリンクからテキストを収集したいと思います。 scrapy
は、次のことを行っている。この場合、「クリックする」というリンクからテキストを収集していますか?
$ scrapy crawl dns_db 2>&1 | grep 'Parsing URL'
2017-01-17 22:14:01 [dns_db] INFO: ## Parsing URL: http://www.iana.org/domains
2017-01-17 22:14:02 [dns_db] INFO: ## Parsing URL: http://www.iana.org/domains/root
2017-01-17 22:14:02 [dns_db] INFO: ## Parsing URL: http://www.iana.org/domains/root/db
:
- オープン」www.iana.orgを
# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule class DnsDbSpider(CrawlSpider): name = 'dns_db' allowed_domains = ['www.iana.org'] start_urls = ['http://www.iana.org/'] rules = ( Rule(LinkExtractor( allow_domains='www.iana.org', restrict_css=r'#home-panel-domains > h2'), callback='parse_item', follow=True), Rule(LinkExtractor( allow_domains='www.iana.org', restrict_css=r'#main_right > p:nth-child(3)'), callback='parse_item', follow=True), Rule(LinkExtractor( allow_domains='www.iana.org', restrict_css=r'#main_right > ul:nth-child(4) > li'), callback='parse_item', follow=True), ) def parse_item(self, response): self.logger.info('## Parsing URL: %s', response.url) i = {} return i
scrapy
ログ:は、次の例を考えてみましょう"
path = []
- 「ドメイン名」のURLをクリックします。 "ドメイン名" ページをクリックし、 "DNSルートゾーン" URLで
path = ['Domain Names']
- 。 "DNSルートゾーン" ページをクリックし、 "ルートゾーンデータベース" URLで
path = ['Domain Names', 'The DNS Root Zone']
- 。
path = ['Domain Names', 'The DNS Root Zone', 'Root Zone Database']
- 「ルートゾーンデータベース」のページでは、データをスクラップしてアイテムを作成します。
path = ['Domain Names', 'The DNS Root Zone', 'Root Zone Database']
人間だけで、このパス/リストを見ることで、ウェブサイトに移動できます。最終的なアイテムもパス属性は持っているでしょう。
どうすれば実現できますか?あなたのURLテキストの上に運び、あなたが到達するまで、それをマージしておくことができます
$ scrapy crawl -L WARN dns_db
2017-02-12 00:13:50 [dns_db] WARNING: ## Request path: []
2017-02-12 00:13:51 [dns_db] WARNING: ## Request path: [{'text': 'Domain Names', 'url': 'http://www.iana.org/domains'}]
2017-02-12 00:13:51 [dns_db] WARNING: ## Request path: [{'text': 'Domain Names', 'url': 'http://www.iana.org/domains'}, {'text': 'The DNS Root Zone', 'url': 'http://www.iana.org/domains/root'}]
2017-02-12 00:13:52 [dns_db] WARNING: ## Request path: [{'text': 'Domain Names', 'url': 'http://www.iana.org/domains'}, {'text': 'The DNS Root Zone', 'url': 'http://www.iana.org/domains/root'}, {'text': 'Root Zone Database', 'url': 'http://www.iana.org/domains/root/db/'}]
「ルートゾーンデータベース」のURLから始めないのはなぜですか?つまりhttp://www.iana.org/domains/root/db – Granitosaurus
中間URLから一部のデータを削除する必要があります。この例では、 'nth-child(3)'、 'nth-child(4)'でフォローアップURLを検索する場所を限定しています。そうでなければ、サイト全体をクロールしました。 * iana.org *は例のウェブサイトですが、私の実際のターゲットは異なります。 –