Scrapy-处理H1的不同版本

时间:2018-09-08 21:47:50

标签: python scrapy

我正在尝试抓取一个页面,其中某些站点的H-Tag正常,而其他站点的H-Tag中还有其他Tag。

一些例子:

<h1>Text</h1>
<h1><a href="">Text</a></h1>
<h1><span>Text</span></h1>
<h1><span>Text</span><span>Text2</span></h1>
and many more...

我必须自己为每一个html标签写一张支票,还是有一种很好的抓取方式?

一种讨厌和不需要的方式是:

h1 = response.xpath('//h1').extract()
if '<a' in h1[0]:
    h1 = json.dumps(response.xpath('//h1/a/text()').extract(), ensure_ascii=False)
elif '<span' in h1[0]:
    h1 = json.dumps(response.xpath('//h1/span/text()').extract(), ensure_ascii=False)
else:
    h1 = json.dumps(response.xpath('//h1/text()').extract(), ensure_ascii=False)

Only one Element eith string()

2 个答案:

答案 0 :(得分:1)

有一种从XPath使用string()的好方法:

response.xpath('string(//h1)').extract_first()

答案 1 :(得分:0)

Scrapy与此无关,但您正在使用的查询语言。
使用XPath,这将起作用:

response.xpath('//h1//text()').extract_first()