【问题标题】:Scrapy returning no resultsScrapy没有返回结果
【发布时间】:2019-07-09 05:04:48
【问题描述】:

我是scrapy的新手。我正在尝试为我正在从事的项目抓取 Indeed 的工作网站。我正在慢慢学习如何使用 google chrome inspect 抓取然后按 control-f 的语法。我跟着本教程学习:

https://www.digitalocean.com/community/tutorials/how-to-crawl-a-web-page-with-scrapy-and-python-3

我基本上无法获得每页 16 个列表。我可以看到它通常以“

//span[@class="company"]/a/text()

到目前为止,这是我的代码:

import scrapy

class IndeedSpider(scrapy.Spider):
    name='indeed_jobs'
    start_urls = ['https://www.indeed.com/jobs?q=software%20engineer&l=Portland%2C%20OR']

    def parse(self, response):
        SET_SELECTOR = '.jobsearch-SerpJobCard'
        for jobListing in response.css(SET_SELECTOR):
            pass

这没有返回任何内容。我希望有 16 行,所以我的 SET_SELECTOR 不正确。非常感谢您的帮助!

【问题讨论】:

    标签: python web-scraping scrapy css-selectors


    【解决方案1】:

    您的选择器工作正常。不过,SET_SELECTOR 不是 Scrapy 特定的变量。您可以调用它任何名称,甚至可以将您的选择器字符串直接放在函数调用中。这也不是什么都不返回的原因。

    它什么也不返回,因为你没有指示它返回任何东西。在您当前的代码中,它会找到每个作业部分(在for 循环中),但随后您告诉它什么都不做(pass)。

    这是一个让公司为每项工作提供的示例:

    import scrapy
    
    class IndeedSpider(scrapy.Spider):
        name='indeed_jobs'
        start_urls = ['https://www.indeed.com/jobs?q=software%20engineer&l=Portland%2C%20OR']
    
        def parse(self, response):
            SET_SELECTOR = '.jobsearch-SerpJobCard'
            for jobListing in response.css(SET_SELECTOR):
                # Yield is necessary to return scraped data.
                yield {
                    # And here you get a value from each job.
                    'company': jobListing.xpath('.//span[@class="company"]/a/text()').get('').strip()
                }
    

    注意在 XPath 的开头使用 .//。原因在documentation。我还在get() 中添加了一个默认的'',当该字段丢失时(docs),这样strip() 就不会抛出错误。

    但是,我建议你先阅读官方的 Scrapy 教程,因为你缺少的部分将在那里解释:https://docs.scrapy.org/en/latest/intro/tutorial.html

    【讨论】:

    • 这是一个很好的答案。谢谢马尔伯特!
    猜你喜欢
    • 2015-07-13
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多