【问题标题】:Scrape a webpage using scrapy into tab-delimited format使用 scrapy 将网页抓取为制表符分隔的格式
【发布时间】:2018-09-27 15:13:41
【问题描述】:

我想使用scrapy将herehere这两个页面上的数据抓取并解析成制表符分隔的格式。我做了这些命令:

scrapy shell
fetch("https://www.drugbank.ca/drugs/DB04899")
print response.text

我的两个问题: 1.例如,对于this页面,当我输入:

response.css(".sequence::text").extract() 
[u'>DB04899: Natriuretic peptides B\nSPKMVQGSGCFGRKMDRISSSSGLGCKVLRRH']

但是当我输入时:

>>> response.css(".synonyms::text").extract()
[]
>>> response.css(".Synonyms::text").extract()
[]

但是您可以看到网页上列出了同义词,因此输出不应为空。有人可以证明我做错了什么吗? (我也尝试了其他标签,例如同义词,同义词)等。

  1. 当我输入:response.css(".targets::text").extract() 时,输出为 [u'Targets (3)']。我想知道如何才能真正解析此列表中的数据,但我想这与没有使用正确的标签和上面的问题 1 有关。

  2. 这是一个模糊的问题/对我来说是高级的,是否可以一次刮掉整个页面,而不必知道每个单独的标签?所以我的输出将是一个名为“标识”的字典,其中包含名称、入藏号、类型等作为键。然后是一本名为药理学的字典,其中包含指示、结构化指示等作为键,然后是另一本名为交互的字典,另一本名为药物经济学等,每页部分一个字典? 谢谢

【问题讨论】:

    标签: python web-scraping scrapy web-crawler


    【解决方案1】:

    页面上确实没有具有synonymsSynonyms 类属性值的元素。

    您可以通过使用following-sibling 的“同义词”文本“向右”移动dt 元素来找到同义词:

    In [2]: response.xpath("//dt[. = 'Synonyms']/following-sibling::dd/ul/li/text()").extract()
    Out[2]: 
    ['BNP',
     'Brain natriuretic peptide 32',
     'Natriuretic peptides B',
     'Nesiritide recombinant']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-15
      • 2023-04-03
      • 1970-01-01
      • 2015-04-15
      • 2021-01-13
      • 2021-12-07
      • 2018-07-24
      • 2019-05-12
      相关资源
      最近更新 更多