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