Соскоблить участок с помощью аспра - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь почистить вставленный ниже сайт и перебрать каждую страницу, извлекая как названия должностей, так и даты, когда было опубликовано каждое задание.Я не могу очистить больше, чем первая страница.Сайт ASPX, поэтому он требует отправки обратных ссылок на сервер для получения информации.Я пытался смоделировать их с помощью скрапа, но безуспешно.Я понимаю, что есть инструменты, которые вы можете использовать для этого (например, Selenium), но я надеюсь, что смогу найти способ сделать это с помощью скрапа.Этот ресурс оказал некоторую помощь: https://blog.scrapinghub.com/2016/04/20/scrapy-tips-from-the-pros-april-2016-edition Но их проблема также немного отличается от моей, и я устала биться головой о стену.

Итак, я до сих пор подходилс общим представлением о том, как я хочу, чтобы скребок работал:

  1. Очистите первую страницу
  2. Найдите кнопку со стрелкой, которая переходит на следующую страницу
  3. Отправитьзапрос формы, который будет симулировать отправку формы на страницу для получения информации для следующей страницы
  4. Очистка возвращенной информации
  5. Повтор

Моя самая большая проблема заключается в том, чтоЯ не очень знаком с ASP-страницами, но я знаю, что на каждой странице браузер должен выполнять обратную передачу, но я не могу предоставить информацию правильным образом, чтобы он перебирал каждую страницу информации.

Вот мой текущий код (он менялся бесчисленное количество раз).Я признаю, что это не будет работать как есть (вторая часть разбора явно не продумана).Я просто надеюсь, что это может послужить хорошей отправной точкой для того, чтобы кто-то еще мог просмотреть его и помочь мне получить ответ.

import scrapy, re
from ..items import UnionItems

class Union(scrapy.Spider):
    name = "union"
    custom_settings = {
    'ITEM_PIPELINES': {
    'tutorial.pipelines.UnionHospital': 300,
    'tutorial.pipelines.MongoDBPipeline': 300,
    }
#   'DEFAULT_REQUEST_HEADERS': {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#   'Referer': 'https://re21.ultipro.com/UNI1029/JobBoard/ListJobs.aspx?__SVRTRID=05EB3802-DC15-42A8-9843-188F8787D187'


# }
    }

    start_urls = [
    'https://re21.ultipro.com/UNI1029/JobBoard/ListJobs.aspx?__SVRTRID=FFDDC66F-AA37-4484-A868-96DF06DA013C',
    ]


    def parse(self,response):
        items = UnionItems()
        job_title = response.css('.highlightRow:nth-child(3) .LinkSmall , .Cell:nth-child(3) .LinkSmall').css('::text').extract()
        dates_posted = response.css('.highlightRow:nth-child(1) .LinkSmall , .Cell:nth-child(1) .LinkSmall').css('::text').extract()
        items['job_title'] = job_title
        items['date_posted'] = dates_posted
        yield items
        i = 2
        for arrow in response.css('input#__Next::attr(value)').extract_first():
            yield scrapy.FormRequest.from_response(
                response,
                method="POST",
                formdata={
                '__Next': response.css('input#__Next::attr(value)').extract_first(),
                '__PageNumber':i,
                '__VIEWSTATE': response.css('input#__VIEWSTATE::attr(value)').extract_first(),
                }
                )
            i = i+1

Этот код успешно выполняет очистку первых страниц вакансий и опубликованных дат, но после этогоЯ не могу понять, как получить следующие несколько страниц.

...