2017-09-27 12 views
1
# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.http import Request 

class InfoSpider(scrapy.Spider): 

    name = 'info' 
    allowed_domains = ['womenonlyconnected.com'] 
    start_urls =['http://www.womenonlyconnected.com/socialengine/pageitems/index'] 

    def parse(self, response): 
     urls = response.xpath('//h3/a/@href').extract() 
     for url in urls: 
      absolute_url = response.urljoin(url) 
      yield Request(absolute_url , callback = self.parse_page) 



    def parse_page(self , response): 
     pass 

を使用しては、私のコードは、このコードを使用している私は、ページ PAGの「もっと見る」の後にすべてのリンクをこするに助けを必要とするだけで、最初の24個のリンクをこすりすることができますどこの最初のページのための1とN開始などScrapy:スクレイプWebページ上の「次」の結果をここにscrapy

http://www.womenonlyconnected.com/socialengine/pageitems/index?page=N 

:URLはこのURLを使ってページ付けができることを調査の少しそれを見つけることができた後 http://www.womenonlyconnected.com/socialengine/pageitems/index

答えて

0

bbelow与えられ、だから私はこのようにあなたのクモを変更します:

# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.http import Request 

class InfoSpider(scrapy.Spider): 

    name = 'info' 
    allowed_domains = ['womenonlyconnected.com'] 
    start_urls = ['http://www.womenonlyconnected.com/socialengine/pageitems/index'] 
    page_num = 1 

    def parse(self, response): 
     urls = response.xpath('//h3/a/@href').extract() 
     for url in urls: 
      absolute_url = response.urljoin(url) 
      yield Request(absolute_url , callback = self.parse_page) 

     if self.page_num < 100: 
      self.page_num += 1 
      yield Request(start_urls[0] + '?page={}'.format(self.page_num) , callback = self.parse) 

    def parse_page(self , response): 
     pass 

私は100ページで停止理由、それはより多くの結果がある場合、したがって、あなたは、次のページに行くべきかどうかを判断することは容易ではないということですが。理論的には、の存在を確認することができます。要素をページに表示してください。問題はそれが常に存在し、結果を含むページがなくなると隠されてしまうことです。しかし、この要素を隠すことはJavaScriptを使って行われるので、Scrapyはそれが隠れていると常に見ています。より多くのページがあるかどうかを確実に判断するには、たとえばページを使用してページをレンダリングする必要があります。 Splash

+0

@TomášLinhart、私もそのサイトをチェックしました。これは最後のページ 'http://www.womenonlyconnected.com/socialengine/pageitems/index?page = 47'です。 – SIM

+0

@Shahin記事が追加されると、おそらく時間の経過とともにページ数が変化するため、これは実際には一般的な解決策ではありません。本当にジェネリックな解決策は、例えばヘッドレスブラウザを使用して提案されたような(ヘッドレス)スプラッシュ。 –

関連する問題