2017-07-07 6 views
2

Ich bin ein Student, und für ein Projekt sammle ich Informationen über Marken. Ich fand diese Website namens Kit: Kit Page, die ich für Marken kratzen möchte. Es hat fast 500 Seiten, und ich habe in Python 3 einen Scrapy Spider geschrieben, der jede Seite durchsucht und die Liste in ein Wörterbuch kopiert, aber ich kann den XPath oder CSS nicht herausfinden, um die Listeninformationen zu erhalten. Hier ist mein items.py:Scrapy Spider liefert keine Informationen

import scrapy 

class KitcreatorwebscraperItem(scrapy.Item): 
    creator = scrapy.Field() 

und hier ist meine Spinne:

import scrapy 

class KitCreatorSpider(scrapy.Spider): 
    name = "kitCreators" 
    pageNumber = 1 

    start_urls = [ 
     'https://kit.com/brands?page=1', 
    ] 

    while pageNumber <= 478: 
     newUrl = "https://kit.com/brands?page=" + str(pageNumber) 
     start_urls.append(newUrl) 
     pageNumber += 1 

    def parse(self, response): 
     for li in response.xpath('//div[@class="section group"][0]'): 

Es läuft erfolgreich, aber ich habe es nicht gelungen, einen XPath zu schreiben, die die Daten erhält ich brauche. Welcher Pfad ist notwendig und wie implementiere ich das im Code?

Antwort

0

Sie können unter Xpath versuchen Markennamen zu extrahieren:

//a[@class="brandsView-list-item-link ng-binding"]/text() 

P. S. Ich würde vorschlagen, dass Sie die Liste der URLs nicht erstellen. Es scheint redundantes Stück Code zu sein. Stattdessen könnten Sie for Schleife verwenden wie:

for page_number in range(479): 
    url = "https://kit.com/brands?page=%s" % page_number 
    ...handle current page source... 

aktualisieren

You can trySelenium + PhantomJS, um Daten von dynamischen Inhalten erforderlich zu erhalten:

from selenium import webdriver 

driver = webdriver.PhantomJS() 
brands_list = [] 

for page in range(1, 480): 
    driver.get("https://kit.com/brands?page=%s" % page) 
    [brands_list.append(brand.text) for brand in driver.find_elements_by_xpath('//a[@class="brandsView-list-item-link ng-binding"]')] 

print(brands_list) 
+0

Hallo Andersson, als ich das anschließen in dieser form: ** def parse (self, antwort): ertrag { "unternehmen": response.xpath ('// a [@ class = "markenView-list-item-link ng-binding "]/text() ') } ** Ich bin immer noch mit einer leeren Liste als Ausgabe getroffen. Können Sie weitere Informationen zur Implementierung oder Platzierung dieses Pfads im Code bereitstellen? –

+0

Dies liegt daran, dass der Seiteninhalt dynamisch ist und man es nicht einfach mit "scrapy" erreichen kann. Check [this] (https://stackoverflow.com/questions/30345623/scraping-dynamic-content-using-python-scrapy) – Andersson

+0

Ich war bisher bei der Implementierung Ihrer angehängten Methode nicht erfolgreich, aber ich werde es weiter versuchen. Wenn Sie irgendwelche Empfehlungen oder Vorschläge haben, sind sie absolut willkommen. Vielen Dank! –

Verwandte Themen