2017-09-27 5 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 
mit

hier wird mit diesem Code Scrape „next“ Ergebnisse auf einer Webseite kann ich nur die ersten 24 Links kratzt nur Hilfe benötigen alle Links nach „mehr“ auf der Seite pag in Schaben url gegeben bbelow http://www.womenonlyconnected.com/socialengine/pageitems/indexScrapy: mein Code scrapy

Antwort

0

nach wenig Untersuchung kann festgestellt werden, dass Sie diese URL paginieren kann mit:

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

wo N Start mit 1 für die erste Seite usw. So würde ich Ihre Spinne wie folgt ändern:

# -*- 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 

Der Grund, dass ich auf Seite 100 zu stoppen ist, dass es nicht so leicht zu bestimmen, ob es weitere Ergebnisse sind und daher, wenn Sie auf die nächste Seite zu gehen. In der Theorie könnten Sie das Vorhandensein von View More Element auf der Seite überprüfen. Das Problem ist, dass es immer vorhanden ist und es ausgeblendet wird, wenn keine weiteren Seiten mit Ergebnissen vorhanden sind. Aber das Verstecken dieses Elements passiert mit JavaScript, sodass Scrapy immer sieht, dass es versteckt ist. Um zuverlässig festzustellen, ob mehr Seiten vorhanden sind, müssten Sie die Seite z. Splash.

+0

@ Tomáš Linhart, ich habe diese Seite auch überprüft. Dies ist die letzte Seite "http: //www.womenonlyconnected.com/socialengine/pageitems/index? Page = 47". – SIM

+0

@Shahin Das ist keine wirklich generische Lösung, da sich die Anzahl der Seiten im Laufe der Zeit ändert, wenn Artikel hinzugefügt werden. Eine wirklich generische Lösung beinhaltet das Rendern der Seite unter Verwendung eines (kopflosen) Browsers, wie es z.B. Spritzen. –