使用Python Scrapy刮擦优惠券网站

时间:2019-06-08 09:34:43

标签: python python-3.x scrapy

我正在尝试从以下网站抓取优惠券代码: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"]}

0 个答案:

没有答案