2017-10-02 4 views
1

Ich habe mich umgesehen und kann die Antwort nicht finden, die ich suche. Ich habe meinen Crawler (Scrapy), um die Ergebnisse in die Nähe meiner Suche zu bringen. Also versuche ich jetzt, die multiplen Ergebnisse von der Seite zu ziehen. Momentan zieht es den ersten und stoppt. Wenn ich extract_first() abnehme, zieht es alle Daten und gruppiert sie. Also auf der Suche nach einer von 2 Antworten, die funktionieren würden.Scrapy endet nach dem ersten Ergebnis

1) weiterhin Ergebnisse kriechen und nicht 2) ungroup jedes Element auf einer neuen Zeile der Ergebnisse

Hier endet mein Code:

import scrapy 
from scrapy.selector import Selector 
from urlparse import urlparse 
from urlparse import urljoin 
from scrapy import Request 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.selector import HtmlXPathSelector 
#from scrappy.http import HtmlResponse 

class MySpider(CrawlSpider): 
    name = "ziprecruiter" 

    def start_requests(self): 
     allowed_domains = ["https://www.ziprecruiter.com/"]  
     urls = [ 
      'https://www.ziprecruiter.com/candidate/search?search=operations+manager&location=San+Francisco%2C+CA' 
      ] 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse) 

    def parse(self, response): 
     for houses in response.xpath('/html/body'): 
      yield { 

       'Job_title:' : houses.xpath('.//span[@class="just_job_title"]//text()[1]').extract_first(), 
       'Company:' : houses.xpath('.//a[@class="t_org_link name"]//text()[1]').extract_first(), 
       'Location:' : houses.xpath('.//a[@class="t_location_link location"]//text()[1]').extract_first(), 
       'FT/PT:' : houses.xpath('.//span[@class="data_item"]//text()[1]').extract_first(), 

       'Link' : houses.xpath('/html/body/main/div/section/div/div[2]/div/div[2]/div[1]/article[4]/div[1]/button[1]/text()').extract_first(), 
       'Link' : houses.xpath('.//a/@href[1]').extract_first(), 
       'pay' : houses.xpath('./section[@class="perks_item"]/span[@class="data_item"]//text()[1]').extract_first() 

       } 

Vielen Dank im Voraus!

EDITIEREN :: Nach mehr Forschung habe ich den Container zum Crawlen neu definiert und das gibt mir die richtigen Antworten. Nun meine Frage ist, wie bekomme ich jedes Element auf der Seite statt nur das erste Ergebnis ... es ist einfach nicht loop. Heres mein Code:

import scrapy 
from scrapy.selector import Selector 
from urlparse import urlparse 
from urlparse import urljoin 
from scrapy import Request 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.selector import HtmlXPathSelector 
#from scrappy.http import HtmlResponse 

class MySpider(CrawlSpider): 
    name = "ziprecruiter" 

    def start_requests(self): 
     allowed_domains = ["https://www.ziprecruiter.com/"]  
     urls = [ 
      'https://www.ziprecruiter.com/candidate/search?search=operations+manager&location=San+Francisco%2C+CA' 
      ] 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse) 

    def parse(self, response): 
     for houses in response.xpath('/html/body/main/div/section/div/div[2]/div/div[2]/div[1]/article[1]/div[2]'): 
      yield { 

       'Job_title:' : houses.xpath('.//span[@class="just_job_title"]//text()').extract(), 
       'Company:' : houses.xpath('.//a[@class="t_org_link name"]//text()').extract(), 
       'Location:' : houses.xpath('.//a[@class="t_location_link location"]//text()').extract(), 
       'FT/PT:' : houses.xpath('.//span[@class="data_item"]//text()').extract(), 
       'Link' : houses.xpath('.//a/@href').extract(), 
       'pay' : houses.xpath('./section[@class="perks_item"]/span[@class="data_item"]//text()').extract() 

       } 
+0

Ich bekomme nur ein einzelnes div-Element aus dem von Ihnen bereitgestellten xpath, was erklärt, warum die houses-Schleife nur einmal ausgeführt wird. Für mich scheint etwas mit deinem XPath nicht in Ordnung zu sein. – lancew

Antwort

1

mir scheint, dass Sie diese XPath stattdessen verwenden sollten:

//div[@class="job_content"] 

Wie das ist die Klasse des div Sie suchen. Wenn ich es für diese Seite ausführe, bekomme ich 20 Div-Elemente zurück. Möglicherweise möchten Sie der xpath-Abfrage jedoch weitere Filter hinzufügen, falls andere divs mit dem Klassennamen vorhanden sind, die nicht analysiert werden sollen.

+0

Danke! Ich habe es einfach geändert. Sieht so aus, als hätte das viel geholfen. Werde noch schneller testen, aber ich denke, das ist der Entschluss! –

+0

hey tut mir leid zu stören, aber ich hatte das gleiche Problem auf einem anderen Crawler. Kannst du mich mit mehr Informationen über "erfolgreiche" Behälter verbinden? –

+0

Ich bin mir nicht sicher, was Sie mit Containern meinen. – lancew

Verwandte Themen