首页 > 解决方案 > Python Scrapy - 如何在抓取特定数据之前勾选复选框和搜索

问题描述

我得到了这个网站https://www.ingenieurs-ensea.fr/annuaire/recherche

我需要勾选 2023、2022、2021 框,然后点击具有输入提交类型的搜索按钮。

在随后的页面上,我在 30 多页中获得了 700 多个名称和描述的列表,我需要在 Excel 中作为 3 个单独的表格(例如,单独列中描述的名称 + 排名和年份)

我尝试了各种缝合尝试,但没有奏效。

这是我最后一次尝试,但总体上我有点迷失了。

class Names(scrapy.Spider):
    name = 'enseafr'
    settings = get_project_settings()
    start_urls = ['https://www.ingenieurs-ensea.fr/annuaire/recherche',]

    def parse(self, response):
        yield scrapy.FormRequest.from_response(
        response,
        formdata={'DiplomePromo[]':'2023'},
        formname='DiplomePromo1',
        callback= self.parse_2,
        method= "POST",
    )

    def parse_2(self, response):
        yield scrapy.FormRequest.from_response(
        response,
        formdata={'DiplomePromo[]': '2022'},
        formname='DiplomePromo2',
        callback=self.parse_3,
        method="POST",
    )

    def parse_3(self, response):
        yield scrapy.FormRequest.from_response(
        response,
        formdata={'DiplomePromo[]': '2021'},
        formname='DiplomePromo3',
        callback=self.after_parse,
        method="POST",
    )

    def after_parse(self, response):
        yield scrapy.FormRequest.from_response(
        response,
        formdata= {'': 'RECHERCHER'},
        callback = self.data,
        method = "POST",
    )

    def data(self, response):
        items = IngItems()
        for item in response.xpath('//div[@class="annuaire_result_list"'):
            items['name'] = item.xpath('//*[@id="zoneAnnuaire_layout"]/div[3]/div[2]/div[3]/div[1]/div[2]/div[1]/a/text()').get()
            items['description'] = item.xpath('//*[@id="zoneAnnuaire_layout"]/div[3]/div[2]/div[3]/div[1]/div[2]/div[2]/div[1]').get()
        yield items

它只会产生一堆错误,所以我猜它超级坏

标签: pythonscrapy

解决方案


请改用此链接。我从“网络”选项卡中得到它:

https://www.ingenieurs-ensea.fr/annuaire/recherche?result=1&annuaire_mode=standard&annuaire_as_no=&keyword=&PersonneNom=&PersonnePrenom=&DiplomePromo%5B%5D=2023&DiplomePromo%5B%5D=2022&DiplomePromo%5B%5D=2021

推荐阅读