首页 > 解决方案 > 使用 scrapy 和 xpath 在 ::before 和 ::after 之间抓取 HTML 元素

问题描述

我正在尝试使用scrapy和xpath从python中的网页中抓取一些链接,但是我要抓取的元素在::before和::after之间,所以xpath看不到它们,因为它们在HTML中不存在但是用javascript动态创建。有没有办法刮掉这些元素?

::before
<div class="well-white">...</div>
<div class="well-white">...</div>
<div class="well-white">...</div>
::after

这是实际页面http://ec.europa.eu/research/participants/portal/desktop/en/opportunities/amif/calls/amif-2018-ag-inte.html#c,topics=callIdentifier/t/AMIF -2018-AG-INTE/1/1/1/default-group&callStatus/t/Forthcoming/1/1/0/default-group&callStatus/t/Open/1/1/0/default-group&callStatus/t/Closed/1 /1/0/default-group&+标识符/desc

标签: htmlxpathscrapy

解决方案


我无法复制您的确切文档状态。
但是,如果您加载页面,您会看到一些模板语言以与您的示例数据相同的格式加载: 在此处输入图像描述

此外,如果您检查 XHR 网络检查器,您可以看到一些针对 json 数据的 AJAX 请求正在发出: 在此处输入图像描述

因此,您可以在此处以方便的 json 格式下载您正在寻找的全部数据:

http://ec.europa.eu/research/participants/portal/data/call/amif/amif_topics.json

scrapy shell "http://ec.europa.eu/research/participants/portal/data/call/amif/amif_topics.json"
> import json
> data = json.loads(response.body_as_unicode())
> data['topicData']['Topics'][0]
{'topicId': 1259874, 'ccm2Id': 31081390, 'subCallId': 910867, ...

推荐阅读