如何使用javascript抓取弹出窗口中呈现的内容:使用scrapy链接

时间:2014-05-23 21:44:48

标签: python ajax selenium web-scraping scrapy

我正在尝试使用scrapy来获取仅在点击javascript:链接后呈现的内容。由于链接似乎不遵循系统编号方案,我不知道如何

1 - 激活javascript:链接以展开折叠面板

2 - 激活一个(现在可见的)javascript:链接以使弹出窗口被渲染,以便可以抓取其内容(摘要)

网站https://b-com.mci-group.com/EventProgramme/EHA19.aspx包含将在我计划参加的会议上展示的摘要的链接。该网站导出为PDF是错误的,因为它在PDF生成时复制了大量数据。我没有处理这个错误,而是转向scrapy只是为了意识到我在我脑海里。我读过:

Can scrapy be used to scrape dynamic content from websites that are using AJAX?

How to scrape coupon code of coupon site (coupon code comes on clicking button)

但我认为我无法连接点。我也见过提到Selenium,但我不确定我是否必须采用它。

我没有取得什么进展,并且想知道我是否可以在正确的方向上推进,并掌握以下信息:

为了制作将扩展折叠面板的POST请求(上面的第1项),我有一个跟踪页面上的JS javascript:ShowCollapsiblePanel(116114,1695,44,191);将导致对带有效负载的TARGETURLOFWEBSITE / EventSessionAjaxService / GetSessionDetailsHtml发出POST请求:

{ “eventSessionID”:116114 “eventSessionWebSiteSetupViewID”:191}

eventSessionID和eventSessionWebSiteSetupViewID的参数显然位于javascript:ShowCollapsiblePanel文本中。

如何使用scrapy迭代表单javascript的所有链接:ShowCollapsiblePanel?我试图使用SgmlLinkExtractor,但是没有返回任何javascript:ShowCollapsiblePanel()链接 - 我怀疑它们不符合“链接”的标准。

更新

取得进展,我发现SgmlLinkExtractor不是正确的方法,而且更简单:

sel.xpath('// a [contains(@href,“javascript:ShowCollapsiblePanel”)]')。re('((\ d +)\,(\ d +)\,(\ d +)\,( \ d +)')

在scrapy控制台中的

返回每个javascript的所有数字参数:ShowCollapsiblePanel()(当然,现在它们都在一个长字符串中,但我只是在控制台中乱搞)。

下一步将采用第一个javascript:ShowCollapsiblePanel()并生成POST请求并分析响应,以查看响应是否包含我在浏览器中单击链接时看到的内容。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,经过大量拔出头发后,我用import.io拉出了我需要的数据集,它有一个可视类型的刮刀但是它能够运行启用了javascript,这正是我需要的,而且它是免费的。我昨晚在scrapy上看到了一个关于git hub的分叉,看起来就像它所谓的导入io刮刀.....给我一分钟 波西亚,但我不知道它是否会做你想要的 https://codeload.github.com/scrapinghub/portia/zip/master 好的