使用scrapy将网页刮成制表符分隔格式

时间:2018-04-17 15:11:16

标签: python web-scraping scrapy web-crawler

我想使用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. 对于我来说,这是一个模糊的问题/提前,是否可以一次性刮掉整个页面,而不必知道每个标签?所以我的输出将是一个名为'identification'的字典,其名称,入藏号,类型等作为键。然后是一个名为药理学的字典,带有指示,结构化指示等作为键,然后是另一个称为交互的字典,另一个称为药物经济学等,每页一个字典部分? 感谢

1 个答案:

答案 0 :(得分:0)

网页上确实没有包含synonymsSynonyms类属性值的元素。

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

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']