在自定义标记中提取文本使用Scrapy

时间:2016-10-25 13:41:27

标签: python scrapy custom-tags

这是论文的web page。提取一些有用的信息。

我想提取本文的标题,作者和摘要。所以我写了以下代码:

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(),
            }

不幸的是,上面的代码无法返回正确的内容。似乎Scrapy无法识别abstracttext元素。

我尝试将abstracttext替换为h4,并且脚本运行良好。

那么如何在abstracttext中提取内容?

2 个答案:

答案 0 :(得分: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()')

参考:

答案 1 :(得分:-1)

您可以使用以下xpath获取值。

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