Scrapy не сканирует страницы - PullRequest
0 голосов
/ 29 января 2019

Я сканирую сайт https://oa.mo.gov/personnel/classification-specifications/all. Мне нужно перейти на каждую страницу позиции и затем извлечь некоторую информацию.Я полагаю, что мог бы сделать это с помощью LinkExtractor или найти все URL-адреса с помощью xPath, что я и пытаюсь описать ниже.Паук не показывает никаких ошибок, но также не сканирует страницы:

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from StateOfMoJDs.items import StateOfMoJDs

class StateOfMoJDs(scrapy.Spider):
    name = 'StateOfMoJDs'
    allowed_domains = ['oa.mo.gov']
    start_urls = ['https://oa.mo.gov/personnel/classification-specifications/all']

    def parse(self, response):
        for url in response.xpath('//span[@class="field-content"]/a/@href').extract():
            url2 = 'https://oa.mo.gov' + url
            scrapy.Request(url2, callback=self.parse_job)


    def parse_job(self, response):
        item = StateOfMoJDs()
        item["url"] = response.url
        item["jobtitle"] = response.xpath('//span[@class="page-title"]/text()').extract()
        item["salaryrange"] = response.xpath('//*[@id="class-spec-compact"]/div/div[1]/div[2]/div[1]/div[2]/div/text()').extract()
        item["classnumber"] = response.xpath('//*[@id="class-spec-compact"]/div/div[1]/div[1]/div[1]/div/div[2]/div//text()').extract()
        item["paygrade"] = response.xpath('//*[@id="class-spec-compact"]/div/div[1]/div[3]/div/div[2]/div//text()').extract()
        item["definition"] = response.xpath('//*[@id="class-spec-compact"]/div/div[2]/div[1]/div[2]/div/p//text()').extract()
        item["jobduties"] = response.xpath('//*[@id="class-spec-compact"]/div/div[2]/div[2]/div[2]/div/div//text()').extract()
        item["basicqual"] = response.xpath('//*[@id="class-spec-compact"]/div/div[3]/div[1]/div/div//text()').extract()
        item["specialqual"] = response.xpath('//*[@id="class-spec-compact"]/div/div[3]/div[2]/div[2]/div//text()').extract()
        item["keyskills"] = response.xpath('//*[@id="class-spec-compact"]/div/div[4]/div/div[2]/div/div//text()').extract()
        yield item

При использовании оболочки scrapy response.xpath('//span[@class="field-content"]/a/@href').extract() выдает список относительных URL-адресов через запятую:

['/personnel/classification-specifications/3005', '/personnel/classification-specifications/3006', '/personnel/classification-specifications/3007', ...]

1 Ответ

0 голосов
/ 29 января 2019

В вашем parse() методе вам нужно yield ваших запросов:

yield scrapy.Request(url2, callback=self.parse_job)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...