2017-07-07 89 views
2

我是一名學生,對於一個項目我收集品牌信息。我發現這個網站叫Kit:Kit Page,我想爲品牌刮。它有近500頁,我在Python 3中編寫了一個Scrapy Spider,它遍歷每個頁面並將列表複製到一個字典中,但我無法弄清xpath或css實際獲取列表信息。這裏是我的items.py:Scrapy Spider不返回任何信息

import scrapy 

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

,這裏是我的蜘蛛:

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]'): 

運行成功,但我一直無法編寫得到我所需要的數據的XPath。什麼路徑是必要的,我如何在代碼中實現它?

回答

0

你可以試試下面Xpath提取品牌:

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

附:我建議你不要創建URL列表。這似乎是多餘的一段代碼。相反,你可能會使用for循環,如:

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

更新

You can trySelenium + PhantomJS獲得所需的動態內容的數據:

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

嗨安德森,當我在這個插件這form:** def parse(self,response): yield { 「company」:response.xpath('// a [@ class =「brandsView-list-item-link ng-binding「]/text()') } **我仍然遇到一個空列表作爲輸出。你能提供更多關於在代碼中實現或放置此路徑的信息嗎? –

+0

這是因爲頁面內容是動態的,你不能簡單地用'scrapy'來獲取它。檢查[this](https://stackoverflow.com/questions/30345623/scraping-dynamic-content-using-python-scrapy) – Andersson

+0

到目前爲止,我一直未能實現你的附加方法,但我會繼續嘗試。如果您有任何建議或建議,絕對受歡迎。謝謝! –