【问题标题】:Scrapy Spider Doesn't Return Any InformationScrapy Spider 不返回任何信息
【发布时间】:2017-12-12 03:42:02
【问题描述】:

我是一名学生,我正在为一个项目收集品牌信息。我发现了这个名为 Kit:Kit Page 的网站,我想为品牌搜索。它有近 500 页,我在 Python 3 中编写了一个 Scrapy Spider,它遍历每个页面并将列表复制到字典中,但我无法确定 xpath 或 css 以实际获取列表信息。这是我的 items.py:

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 来获取我需要的数据。需要什么路径,如何在代码中实现?

【问题讨论】:

    标签: python python-3.x xpath scrapy scrapy-spider


    【解决方案1】:

    您可以在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 try Selenium + 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)
    

    【讨论】:

    • 嗨 Andersson,当我以这种形式插入时:def parse(self, response): yield { "company":response.xpath('//a[@class=" brandView-list-item-link ng-binding"]/text()') } 我仍然遇到一个空列表作为输出。您能否提供有关在代码中实现或放置此路径的更多信息?
    • 这是因为页面内容是动态的,您不能简单地使用scrapy 获取它。检查this
    • 到目前为止,我未能成功实现您的附加方法,但我会继续尝试。如果您有任何建议或建议,绝对欢迎。谢谢!
    猜你喜欢
    • 2012-09-24
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多