Я пытаюсь очистить листовки с сайта flipp.com/weekly_ads с помощью Scrapy.Прежде чем я смогу очистить листовки, мне нужно ввести код города и выполнить поиск местных листовок (на сайте это делается нажатием кнопки).
Я пытаюсь ввести значение и симулировать «нажатие кнопки» с помощью Scrapy.
Сначала я думал, что смогу использовать FormRequest.from_response для поиска формыи введите мой код города в качестве значения.Однако кнопка написана на javascript, что означает, что форма не может быть найдена.
Итак, я попытался найти HTTP-вызов через Inspect Element> Developer Tools> Network> XHR, чтобы проверить, будет ли какой-либо из вызовов вызыватьзагрузите эквивалентную страницу flipp с новым, введенным кодом города (мой код города).
Теперь я очень плохо знаком с Scrapy и HTTP-запросами / ответами, поэтому я не уверен, что найденная ссылкаисправить один (как, например, ответ с новым кодом города), или нет.
Это запрос, который я нашел:
https://gateflipp.flippback.com/bf/flipp/data?locale=en-us&postal_code=90210&sid=10775773055673477
Я использовал произвольный почтовый индекс для запроса (90210).
Я подозреваю, что это неверный запрос, но в случае, если я ошибаюсь, и это правильно:
Как перейти к - flipp.com/weekly_ads/groceries из этого запроса, сохраняя новый код города?
Если это неверно:
Как ввести значение для кнопки JavaScript и получить результат с помощью Scrapy?
import scrapy
import requests
import json
class flippSpider(scrapy.Spider):
name = "flippSpider"
postal_code = "M1T2R8"
start_urls = ["https://flipp.com/weekly_ads"]
def parse(self, response): #Input value and simulate button click
return Request() #Find http call to simulate button click with correct field/value parameters
def parse_formrequest(self, response):
yield scrapy.Request("https://flipp.com/weekly_ads/groceries", callback= self.parse_groceries)
def parse_groceries(self, response):
flyers = []
flyer_names = response.css("class.flyer-name").extract()
for flyer_name in flyer_names:
flyer = FlippspiderItem()
flyer["name"] = flyer_name
flyers.append(flyer)
self.log(flyer["name"])
print(flyer_name)
return flyers
Я ожидал найти фактический запрос кнопки javascript в ссылках XHR, но тот, который я нашел, кажется неправильным.
Редактировать: я не хочу использовать Selenium, он медленный, и я не хочубраузер, чтобы всплыть во время выполнения паука.