#python #web-scraping #scrapy #scrape
#python #очистка веб-страниц #scrapy #очистить
Вопрос:
Я пытаюсь очистить некоторые результаты поиска от
С помощью команд
response.css('div.search_result_title').extract()
Это работает, но когда я пытаюсь удалить html-теги с
response.css('div.search_result_title::text').extract()
Но я продолжаю получать, n n n n n n
[u’n’, u’n(Dissolved)n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’, u’n’]
Ребята, вы знаете почему? Спасибо!
Комментарии:
1. Вы хотите получить тексты заголовков? У вас есть
a
insidediv
, так что да, вы получаете много пустых данных. Используйтеdiv.search_result_title a::text
.2. Я не заметил.. как неосторожно.. большое вам спасибо! Вы сочли меня ценным уроком!!
3. Кроме того, вы случайно не знаете, как просто получить класс div class=»SearchResult» таким образом, отображая имена, адреса вместе? только с текстом?
4. Попробуйте
response.css('div.searchResult ::text')
, например. Это позволит полностью извлечь тексты внутри теговdiv.searchResult
элемента.
Ответ №1:
Вы хотите получить тексты заголовков? У вас есть a
inside div
, так что да, вы получаете много пустых данных. Используйте div.search_result_title a::text
.
И для второго вопроса о получении текста всего блока:
for i in response.css('div.searchResult'):
print ' '.join([j.strip() for j in i.css('::text').extract() if j.strip()])
Комментарии:
1. Большое вам спасибо, я получаю желаемые результаты! Если я хочу получить результаты для будущего вывода, мне просто заменить оператор print ключевым словом для вывода?
2. Не совсем. Вместо print делаем
yield {'data': ' '.join([j.strip() for j in i.css('::text').extract() if j.strip()])}
3. Еще раз спасибо, что помогли мне! Отличного дня!