私は、Webページから別の名前を解析するために、小さなスクレーパーをPython Scrapyで作成しました。ページは、ページ付けによってさらに4ページを横断しました。ページ全体での総数は46であるが、36の名前を奪っている。2番目のページの内容を無視した治療
スクレーパーは最初のリンク先ページの内容をスキップしますが、私のスクレーパーではparse_start_url
引数を使用して処理しました。
しかし、私は今このスクレーパーで直面している問題は、2ページ目のコンテンツをスキップして残りのすべてを解析することです。最初のページ、3ページ目、4ページ目などを意味します。なぜそれが起こっているのか、それに対処する方法は?前もって感謝します。あなたはstart_urlsに指定されているリンクは、実際に2ページ目のリンクであるので
import scrapy
class DataokSpider(scrapy.Spider):
name = "dataoksp"
start_urls = ["https://data.ok.gov/browse?page=1&f[0]=bundle_name%3ADataset&f[1]=im_field_categories%3A4191"]
def parse(self, response):
for link in response.css('.pagination .pager-item a'):
new_link = link.css("::attr(href)").extract_first()
yield scrapy.Request(url=response.urljoin(new_link), callback=self.target_page)
def target_page(self, response):
parse_start_url = self.target_page # I used this argument to capture the content of first page
for titles in response.css('.title a'):
name = titles.css("::text").extract_first()
yield {'Name':name}
ありがとうAndrésPérez-Albela H.、あなたの答えです。この解決策は間違いなく機能し、ここに投稿する前に私もそれを試しました。しかし、最初のページ( 'parse_start_url')からデータを解析するための組み込みのスタイルがあります。私は実際にスクリプトをそのガイドラインに基づいて作成することを期待していました。再度、感謝します。 – SIM
@Topto私は私の答えが助けてくれてうれしいです。それがあなたの質問に答えるなら、あなたが私のサポートを大切にする場合には、それを選択された回答とupvoteとして設定してください。 –
@Topto 'parse_start_url'は** CrawlSpider **のためであり、** Spider **のためのものではありません。つまり、それを上書きする必要がある場合は、まずCrawlSpiderから継承する必要があります。 CrawlSpiderは、ルールを必要とせず、私の回答に追加したコード(Spiderだけ)で同じ動作を再現できるので、ユースケースには必要ありません。 –