2016-10-25 2 views
0

Это web page для бумаги. Есть полезная информация для извлечения.Извлечение текста в пользовательских тегах используется Scrapy

Я хочу извлечь название, автору и резюме этой статьи. Поэтому я написал следующий код:

class PublicationSpider(scrapy.Spider): 
    name = "publications" 
    start_urls = [ 
     'https://www.ncbi.nlm.nih.gov/pubmed/15721472', 
    ] 

    def parse(self, response): 
     for publication in response.css('div.rprt.abstract'): 
      yield { 
       'title': publication.css('h1::text').extract_first(), 
       'author': publication.css('div.auths > a::text').extract(), 
       'abstract': publication.css('div.abstr abstracttext::text').extract(), 
       'doi': publication.css('div.aux a::text').extract_first(), 
      } 

К сожалению, приведенный выше код не смог вернуть правильный контент. Кажется, что элемент abstracttext не может быть распознан Scrapy.

Я попытался заменить abstracttext на h4, и сценарий прошел хорошо.

Итак, как я могу извлечь контент в abstracttext?

+0

Ваш код работает для меня. попробуйте 'scrapy shell ' then 'response.css ('div.abstr abstracttext :: text')' и результаты есть. Может быть, по какой-то причине ваш «lxml» backend выполняет ответ по-разному, какую операционную систему вы используете? Можете ли вы также попробовать «pip show lxml» и сообщить нам версию? – Granitosaurus

+0

@Granitosaurus Да, он работает в 'scrapy shell', но не работает в скрипте Python. –

+0

Ваш паук работает для меня. Не могли бы вы разместить свой 'settings.py'? У вас есть какие-либо посредники или трубопроводы? Не могли бы вы также опубликовать весь журнал выполнения? Вы можете сделать это с помощью 'scrapy crawl spider 2> & 1> output.log' – Granitosaurus

ответ

-1

вы можете использовать следующий xpath для получения значения.

title = publication.xpath("//div[@class='rprt_all']/div/h1/text()").extract() 
+0

Он работает для 'h1', но не работает для тега с именем' abstracttext' –

0

я нашел альтернативное решение, просто используя lxml:

from lxml import html 
from requests import get as getRequest 

htmlPage = getRequest('https://www.ncbi.nlm.nih.gov/pubmed/15721472') 
htmlTree = html.fromstring(htmlPage.content) 

title    = htmlTree.xpath('//div[@class="rprt abstract"]/h1/text()') 
authors    = htmlTree.xpath('//div[@class="auths"]/a/text()') 
doi     = htmlTree.xpath('//dl[@class="rprtid"]/dd/a/text()') 
abstractHeadings = htmlTree.xpath('//div[@class="abstr"]/div/h4/text()') 
abstractTexts  = htmlTree.xpath('//div[@class="abstr"]/div/p/abstracttext/text()') 

Ссылка:

Смежные вопросы