Python 匹配未嵌套的元素(碎片)

Python 匹配未嵌套的元素(碎片),python,scrapy,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) ..Securi

我是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、严重性、URL和描述与日期匹配

我考虑过使用'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,但总的来说,你应该看看

的工作原理!对于感兴趣的人:
response.xpath('//h2[1]/以下同级::ul[1]/li/a/@href').extract()