python - 匹配未嵌套的元素(scrapy)
问题描述
我对 Python 还很陌生,第一次尝试使用scrapy,但我一直坚持对未嵌套的 HTML 元素进行分组。
所以基本上两个 HTML 元素每次都重复,并且属于一起。由于 UL 没有嵌套在 H2 中,我不知道如何将它们配对。
我想要实现的是使用以下结构化数据获取日期和漏洞列表:
March 10, 2020 (Date)
.MFSA 2020-10 (UID)
..Level high (Severity)
../en-US/security/advisories/mfsa2020-10/ (Url)
..Security Vulnerabilities fixed in Thunderbird 68.6 (Description)
.MFSA 2020-09 (UID)
..Level high (Severity)
../en-US/security/advisories/mfsa2020-09/ (Url)
..Security Vulnerabilities fixed in Firefox ESR 68.6 (Description)
到目前为止,我所做的是使用以下方法手动刮擦外壳:
scrapy shell 'https://www.mozilla.org/en-US/security/advisories/'
>>>response.css('article.mzp-c-article h2::text').get()
'March 10, 2020'
>>>response.css('article.mzp-c-article a::attr(href)').get()
'/en-US/security/advisories/mfsa2020-10/'
>>>response.css('li.level-item span::attr(class)')[4].get() # first few results are severity index
'level critical'
>>>response.css('li.level-item a::text').get()
' Security Vulnerabilities fixed in Thunderbird 68.6'
问题是我无法以这种方式将 Uid、Severity、URL 和 Description 与 Date 匹配。
我曾想过使用 'response.css('article.mzp-c-article ul').getall()[$n]' 收集每个 ul 的所有数据并使用 RE 解构所需的数据,但这感觉就像是 PITA . 谁能指出我正确的方向?
一种
解决方案
在这种情况下,您必须使用 xpath 而不是 css。
response.xpath('//article//h2::following-sibling/ul/li/a/@href').extract()
我可能拼错了一些 html,但总的来说你应该看看https://www.w3schools.com/xml/xpath_axes.asp
推荐阅读
- c# - 从 .net 应用程序执行 Oracle 存储过程
- sql - 从 SQL 构建 NodeJS 对象
- django - 为什么 Django views.py 在不更改 url 的情况下重定向到另一个视图?
- c - C - 从文件中选择随机字符串
- mysql - 如何并排显示单表查询的结果
- java - last==i 背后的直觉?
- feathersjs - 从服务调用自定义中间件
- java - SelectionTracker.Builder 不工作 IllegalArgumentException
- jquery - 如何在附加行中显示来自 validate() 的错误
- amazon-s3 - 无法使用 java dsl camel 组件连接到亚马逊 s3 客户端