Мои текстовые результаты scrpay продолжают возвращать » n n»

#python #web-scraping #scrapy #scrape

#python #очистка веб-страниц #scrapy #очистить

Вопрос:

Я пытаюсь очистить некоторые результаты поиска от

https://www.companiesintheuk.co.uk/Company/Find?q=a

С помощью команд

 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 inside div , так что да, вы получаете много пустых данных. Используйте 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. Еще раз спасибо, что помогли мне! Отличного дня!