2016-06-25 7 views
0

In Methode parse() Spider kriecht 4 URLs und sendet dann an Methode parse_dir_contents(), um einige Daten zu kratzen, aber nur 4. URL wird gekratzt Ich verstehe nicht, warum es andere 3 URLs nicht schabt?was ist mit dieser scrapy spinne falsch? scrapes only letzte URL

import scrapy 
from v_one.items import VOneItem 
import json 

class linkedin(scrapy.Spider): 
    name = "linkedin" 
    allowed_domains = ["linkedin.com"] 
    start_urls = [ 
    "https://in.linkedin.com/directory/people-s-1-2-4/", 
    ] 

    def parse(self, response): 

     for href in response.xpath('//*[@id="seo-dir"]/div/div/div/ul/li/a/@href'): 
      url = response.urljoin(href.extract())  
      print "________________"+url 
      yield scrapy.Request(url, callback=self.parse_dir_contents) 



    def parse_dir_contents(self, response): 

     for sel in response.xpath('//*[@id="profile"]'): 
      url = response.url 
      print "____________"+url    
      item = VOneItem() 
      item['name'] = sel.xpath('//*[@id="name"]/text()').extract() 
      item['headline'] = sel.xpath('//*[@id="topcard"]/div/div/div/p/span/text()').extract() 
      item['current'] = sel.xpath('//*[@id="topcard"]/div/div/div/table/tbody/tr/td/ol/li/span/text()').extract() 
      item['education'] = sel.xpath('//*[@id="topcard"]/div/div/div/table/tbody/tr/td/ol/li/a/text()').extract() 
      item['link'] = url 
      yield item 
+0

Ihr Code besucht bereits jede Seite/jeden Link, also weiß ich nicht, wie Sie denken, dass er nicht jede URL scrappt. Auch Ihre XPaths sind sehr spröde, es gibt viele Klassennamen, um die Daten genauer zu bekommen. Auch tbody wird in der Regel vom Browser hinzugefügt, so dass es nicht wirklich sein kann –

Antwort

0

Durch die Seiten Inspektion Ich denke, dass es keine Notwendigkeit der in der parse_dir_contents Funktion for Schleife ist. Machen Sie die Funktion wie folgt:

def parse_dir_contents(self, response): 
     item = VOneItem() 
     item['name'] = response.xpath('//*[@id="name"]/text()').extract() 
     item['headline'] = response.xpath('//*[@id="topcard"]/div/div/div/p/span/text()').extract() 
     item['current'] = response.xpath('//*[@id="topcard"]/div/div/div/table/tbody/tr/td/ol/li/span/text()').extract() 
     item['education'] = response.xpath('//*[@id="topcard"]/div/div/div/table/tbody/tr/td/ol/li/a/text()').extract() 
     item['link'] = response.url 
     return item 

Und überprüfen Sie, ob dies Ihr Problem löst.

+0

ist dieser Ansatz irreführend? Bitte stimmen Sie nicht lautlos ab. Geben Sie den Grund an. –