试图确定为什么我的xpath在Scrapy失败



我正在尝试在这样的页面上运行Scrapy spider:

https://careers.mitre.org/us/en/job/R104514/Chief-Engineer-Technical-Analysis-Department

我想让蜘蛛检索包含资格和职责的要点。我可以编写一个xpath表达式,它可以在我的浏览器中工作:

//*/section/div/ul/li

但是当我尝试使用Scrapy shell时:

response.xpath("//*/section/div/ul/li")

返回一个空列表。基于复制response.text并在浏览器中加载它,似乎文本是可访问的,但我仍然无法访问这些子弹。

任何帮助将非常感激!

查看您所链接的页面,您所针对的列表项实际上并不在文档响应本身中,而是稍后由JavaScript加载到DOM中。

要访问这些,我建议查看scrapy关于选择动态加载内容的文档。这里特别适用的部分是解析JavaScript代码部分。

在第二个示例之后,我们可以使用chompjs(您需要首先使用pip安装它)来提取JavaScript数据,对html字符串进行转义,然后将其加载到scrapy中进行解析。例如:

scrapy shell https://careers.mitre.org/us/en/job/R104514/Chief-Engineer-Technical-Analysis-Department

:

import html    # Used to unescape the HTML stored in JS
import chompjs # Used to parse the JS
javascript = response.css('script::text').get()
data = chompjs.parse_js_object(javascript)
description_html = html.unescape(data['description'])
description = scrapy.Selector(text=description_html, type="html")
description.xpath("//*/ul/li")

这会输出你想要的列表项:

[<Selector xpath='//*/ul/li' data='<li>Ensure the strength ...

最新更新