Использование Python Scrapy для очистки сайта купона - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь очистить коды купонов с этого сайта: https://www.cuponation.com.sg/zalora-coupon

Мне просто нужны коды (которые обычно отображаются после того, как пользователь нажимает «просмотреть код», и код купона открывается в новой вкладке, а исходная вкладка перенаправляет на сайт продавца). Обратите внимание, что я только хотите коды, и поэтому не хотите нажимать на кнопки, которые "просмотреть скидки".

Я приложил некоторый сводный код, а также попытался просмотреть сетевые запросы после нажатия «просмотреть код», чтобы я мог заставить python отправлять правильные сетевые запросы для очистки кода купона, но, похоже, не может Сделай так. Кажется, единственной альтернативой является использование Selenium для симуляции клика пользователя, но это слишком утомительно и требует много ресурсов. Вместо этого, есть ли способ для Python запустить правильный сетевой запрос и вывести все коды в файл json для просмотра.

Пробовал адаптировать сводный код ниже, но, похоже, не может определить правильные сетевые запросы, запускаемые для получения кода купона.

from scrapy.http import Request
from scrapy.item import Item, Field
from scrapy.selector import HtmlXPathSelector
from scrapy.spider import BaseSpider


class VoucherItem(Item):
    voucher_id = Field()
    code = Field()


class CuponationSpider(BaseSpider):
    name = "cuponation"
    allowed_domains = ["cuponation.in"]
    start_urls = ["https://www.cuponation.in/babyoye-coupons"]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        crawled_items = hxs.select('//div[@class="six columns voucher-btn"]/a')
        for button in crawled_items:
            voucher_id = button.select('@data-voucher-id').extract()[0]

            item = VoucherItem()
            item['voucher_id'] = voucher_id
            request = Request("https://www.cuponation.in/clickout/index/id/%s" % voucher_id,
                              callback=self.parse_code,
                              meta={'item': item})
            yield request

    def parse_code(self, response):
        hxs = HtmlXPathSelector(response)

        item = response.meta['item']
        item['code'] = hxs.select('//div[@class="code-field"]/span/text()').extract()

        return item

Ожидаемый результат:

{"voucher_id": "5735", "code": ["MUM10"]}
{"voucher_id": "5446", "code": ["APP20"]}
{"voucher_id": "3963", "code": ["CNATION150"]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...