如何使用 Scrapy 从点击事件获取链接

How to get link from onclick event using Scrapy?

本文关键字:事件 获取 链接 何使用 Scrapy      更新时间:2023-09-26

我一直在使用Scrapy来获取内容,但是我在从这个特定网站获取链接时遇到了一些问题:Taleo 网站

单击标题将转到职位描述。但是 href 设置为"#"。

点击事件是:

onclick="javascript:setEvent(event);requisition_openRequisitionDescription('requisitionListInterface','actOpenRequisitionDescription',_ftl_api.lstVal('requisitionListInterface', 'requisitionListInterface.listRequisition', 'requisitionListInterface.ID1380', this),_ftl_api.intVal('requisitionListInterface', 'requisitionListInterface.ID1384', this));return ftlUtil_followLink(this);

此外,所有作业描述的链接对于所有作业都是相同的。所有描述链接都是:

https://cantire.taleo.net/careersection/2/jobdetail.ftl

我已经使用 scrapy 一段时间了,想点击链接并抓取内容。我只是在这种设置中遇到了问题,其中 href 属性是"#"并且链接是由 JavaScript 创建的。

过去,我会执行以下操作来获取链接并关注它们,但在这种情况下,这不起作用。

item['link'] = sel.xpath('@href').extract()[0]

我该如何解决这个问题?谢谢

当您单击职位标题时,浏览器会发送POST请求而不是GET。这就是为什么链接相同,只是每个作业列表POST请求参数不同。

当您检查网络控制台时,您可以看到在此链接上发送了一个POST请求,https://cantire.taleo.net/careersection/2/jobdetail.ftl具有各种formdata(键值对)。您可以使用Request模块发送包含所有参数的POST请求,该模块将带您进入职位描述页面。

POST请求将如下所示:

yield scrapy.Request(url="https://cantire.taleo.net/careersection/2/jobdetail.ftl", method="POST", formdata={'key':'value'}, callback=self.parse)

我强烈建议为此使用Selenium + Scrapy。通过这种方式,您可以轻松处理点击和呈现动态内容的问题。有用的链接在这里。