Как получить данные от нажатия с Scrapy - PullRequest
0 голосов
/ 23 октября 2018

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

Посещение: http://grace.itam.mx/EDSUP/BWZKSENP.P_Horarios1?s=1416

В приведенном ниже коде сначала я получаю все элементы раскрывающегося списка, и он работает нормально.

Но я также хотел бы получить информацию после выбора элемента и щелчка по элементу submbit, чтобы перейти на новую страницу с таблицей данных.Есть ли способ сделать это?

# run this file as
# scrapy runspider scrappy-itam.py -t csv -o s4-out.csv
from scrapy.spiders import Spider
from collections import OrderedDict
class MySpider(Spider):
    name = 's4'
    allowed_domains = ['grace.itam.mx']
    start_urls = [ "http://grace.itam.mx/EDSUP/BWZKSENP.P_Horarios1?s=1416"]

    def parse(self, response):
        items = []
        for cour in response.xpath("//div[@class='pagebodydiv']/form/select/option/text()"):
             item = OrderedDict()
             info=cour.extract()
             course=info.split('-')
             item['Department']=course[0]
             item['Course']=course[2]
             items.append(item)
        return items

Редактировать: Здесь я использовал FormRequest для анализа новой страницы.

lass MySpider(Spider):
name = 's4'
allowed_domains = ['grace.itam.mx']
start_urls = [ "http://grace.itam.mx/EDSUP/BWZKSENP.P_Horarios1?s=1416"]

def parse(self, response):
    for c in response.xpath("//div[@class='pagebodydiv']/form/select/option/text()"):
         item = OrderedDict()
         info=c.extract()
         yield scrapy.FormRequest.from_response(response,formdata={'TXT_MATERIA':info},callback=self.after_button)


def after_button(self,response):
    yield response.xpath("//div[3]/table[1]/tbody/tr[1]/td[1]/b/text()").extract()

1 Ответ

0 голосов
/ 23 октября 2018

Использовать Scrapy FormRequest.from_response , используя в качестве параметра значения элемента, который вы хотите выбрать.Таким образом, вы можете анализировать содержимое другой страницы с помощью другого метода вашего паука.

РЕДАКТИРОВАТЬ 1:

В вашем FormRequest есть ошибка.Измените его на:

scrapy.FormRequest.from_response(response,formdata={'txt_materia':info, 's' : '1416'})

Не думаю, что добавление параметра s : 1416 является обязательным требованием, но txt_materia должно быть в нижнем регистре.Когда я использовал его в качестве кода выше, ответы были правильными.

В вашем after_button методе я обнаружил две незначительные ошибки:

  1. Не указывать tbody.Используйте относительные пути, чтобы избежать их!
  2. Как указано в сообщении об ошибке, вы не можете просто получить от Spider результат этого xpath.Вы должны вернуть запрос, BaseItem, dict или None.

Это код, который я написал для after_button:

def after_button(self,response):
    yield { "text" : response.xpath("//div[3]/table[1]//tr[1]/td[1]/b/text()").extract_first() }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...