Попытка извлечь данные, используя python / scrapy и не может найти правильный xpath - PullRequest
0 голосов
/ 22 апреля 2019

Я хотел почистить сайт.

https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab

Я хочу извлечь

  • Название
  • Местоположение
  • Компания

вакансий.

Я пробовал несколько путей xpath для местоположения, компании и названия, и ничего не работало. Я также пытался записать его в файл CSV. Все местоположение, компания и название выходят пустыми. Я думаю, что мой xpath не правильный

import scrapy


class JobItem(scrapy.Item):
    # Data structure to store the title, company name and location of the job
    title = scrapy.Field()
    company = scrapy.Field()
    location = scrapy.Field()

class stackoverflow(scrapy.Spider):
    name = 'stack_bot'
    start_urls = ['https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab']

    def parse(self, response):
        for a_el in response.xpath('//div[@class="listResults"]'):
            section = JobItem()
            section['title']   = ?
            section['company'] = ?
            section['location'] = ?
            yield section

Может кто-нибудь помочь мне с xpath для названия, компании и местоположения. Также xpath('//div[@class="listResults"]') является правильным.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Подумайте об использовании RSS-канала в качестве источника, так как со временем он станет более надежным

https://stackoverflow.com/jobs/feed

Затем вы можете использовать следующие селекторы css для генерации списков, которые вы можете перечислить (zip ()) вместе

селектор названий: item title

выбор компаний: a10\:author

месторасположение: location

0 голосов
/ 22 апреля 2019

Я не уверен, что xpath('//div[@class="listResults"]') правильно.Это дает только один элемент.Вот моя версия кода:

def parse(self, response):
    for a_el in response.xpath('//div[contains(@class, "-job-summary")]'):
        section = JobItem()
        section['title']   = a_el.css('h2 a::text').get()
        section['company'] = a_el.xpath('.//div[contains(@class, "-company")]/span[1]/text()').get()
        section['location'] = a_el.xpath('.//div[contains(@class, "-company")]/span[2]/text()').get()
        yield section
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...