Scrapy - справляйтесь с разными версиями h1 - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь удалить страницу, на которой некоторые сайты имеют обычный H-тег, а другие сайты имеют другие теги внутри H-тегов.

некоторые примеры:

<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 голосов
/ 09 сентября 2018

Есть один хороший способ использовать string() из XPath:

response.xpath('string(//h1)').extract_first()
0 голосов
/ 09 сентября 2018

Scrapy это не касается, но используется язык запросов, который вы используете.
Используя XPath, это будет работать:

response.xpath('//h1//text()').extract_first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...