Сканирование веб-страниц Python с помощью Scrapy не удается заполнить форму

#python #web-scraping #scrapy

Вопрос:

Я пытаюсь обойти этот сайт, который требует, чтобы я заполнил форму с почтовым индексом, чтобы получить информацию о магазинах. веб-сайт: https://www.aldi-sued.de/de/filialen.html

Я написал следующий код, но не знаю, что не так. Пожалуйста, помогите:

 from __future__ import unicode_literals
import logging
import scrapy
from scrapy.loader import ItemLoader
from ..items import StoreItem

logger = logging.getLogger(__name__)


class StoreSpider(scrapy.Spider):
    name = "aldib"
    start_urls = ["https://www.aldi-sued.de/de/filialen.html"]

    def parse(self, response):
        yield scrapy.FormRequest(url="https://www.aldi-sued.de/de/filialen.html",
                                 formdata={"search": "38644"},
                                 callback=self.parse_stores)

    def parse_stores(self, response):
        for store in response.css('div.dealer-list > div.dealer-item-content'):
            name = store.xpath("span.dealer-name > strong::text").extract()

            sl = ItemLoader(item=StoreItem(), selector=store, response=response)
            sl.add_value("Name", name)
            yield sl.load_item()
 

Я подозреваю, что на веб-сайте есть 2 формы: одна для поиска по сайту и одна для поиска в магазине, и я не могу выбрать, какая из них указана в первом коде. Поэтому я изменил часть запроса на

     def parse(self, response):
        yield scrapy.FormRequest.from_response(response,
                                               formid="storeSearchForm",
                                               formdata={"search": "38644"},
                                               callback=self.parse_stores)

 

В конце концов, я все еще не могу найти названия магазинов по этому почтовому индексу.