Scrapy没有结果

问题描述 投票:0回答:1

我是scrapy的新手。我正在努力为我正在研究的项目抓取Indeed的工作现场。我正在慢慢学习如何使用谷歌浏览器检查然后点击控制-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个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.