cra草返回没有结果

时间:2019-02-15 04:43:17

标签: python web-scraping scrapy css-selectors

我是新手。我正在尝试为我正在从事的项目抓取确实的工作现场。我正在慢慢学习如何使用Google Chrome浏览器检查抓取的语法,然后按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是不正确的。帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您的选择器正常工作。不过,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