我有一个项目,我必须从许多页面中抓取许多网址。我认为每个页面的结构都会保持不变,但有时它会改变并破坏我的代码。
我需要提取一篇文章的摘要及其关键字,这两篇文章都在一个单独的<p>
中,并且具有相同的类"marginB3"
。所以我抓了一个页面,只得到了两个结果,一个用于抽象,另一个用于关键字:
hxs = HtmlXPathSelector(response)
lista = hxs.select('//p[@class="marginB3"]/text()')
self.abstracto = lista[0].extract()
self.keywords = lista[1].extract()
然后我尝试了第三页,并出现了一个新的<p>
,其中包含有关该文章的一些其他信息并更改了结构。这使得它变得更加复杂,因为没有id,只有类。如果关键字没有ID,我如何区分哪个是<p>
,如果它们上面有自己的<h2>
:
<h2>Info</h2>
<p class="marginB3">a_url_I_want</p>
我可以通过阅读<h2>
然后下面的<p>
来区分吗?
答案 0 :(得分:0)
我不是XPATH专家,但我认为您需要查看following
轴以捕获<h2>
标记后的项目。
通常,当您尝试解析的文档没有很好地标记时,XPATH会很糟糕。冒着增加更多复杂性的风险,您可以查看类似BeautifulSoup模块的内容,这样可以采用更加程序化的方式来处理不一致的标记。 XPATH是一种(主要)声明性语言,声明性语言很难处理非常规输入。
答案 1 :(得分:0)
你当然可以。
试试这个:
# First <p>
hxs.select('//h2/following-sibling::p[@class="marginB3"][1]/text()').extract()
# Second <p>
hxs.select('//h2/following-sibling::p[@class="marginB3"][2]/text()').extract()