我正在尝试获取有关蛋白质数据库中原始引用论文的具体信息,仅给出蛋白质的 4 个字母 PDBID。
为此,我使用了 python 库请求和 BeautifulSoup。为了尝试构建代码,我转到了特定蛋白质的页面,在本例中为 1K48,并保存了页面的 HTML(通过按 command+s 并将 HTML 保存到我的桌面)。
首先要注意:
1) 该页面的网址是:http ://www.rcsb.org/pdb/explore.do?structureId=1K48
2) 您可以通过将最后四个字符替换为适当的 PDBID 来访问任何蛋白质的页面。
3) 我打算在许多 PDBID 上执行此过程,以便按它们最初出现的期刊对大列表进行排序。
4) 通过 HTML 搜索,可以在此处的表单中找到期刊标题:
<form action="http://www.rcsb.org/pdb/search/smartSubquery.do" method="post" name="queryForm">
<p><span id="se_abstractTitle"><a onclick="c(0);">Refined</a> <a onclick="c(1);">structure</a> <a onclick="c(2);">and</a> <a onclick="c(3);">metal</a> <a onclick="c(4);">binding</a> <a onclick="c(5);">site</a> of the <a onclick="c(8);">kalata</a> <a onclick="c(9);">B1</a> <a onclick="c(10);">peptide.</a></span></p>
<p><a class="sePrimarycitations se_searchLink" onclick="searchCitationAuthor('Skjeldal, L.');">Skjeldal, L.</a>, <a class="sePrimarycitations se_searchLink" onclick="searchCitationAuthor('Gran, L.');">Gran, L.</a>, <a class="sePrimarycitations se_searchLink" onclick="searchCitationAuthor('Sletten, K.');">Sletten, K.</a>, <a class="sePrimarycitations se_searchLink" onclick="searchCitationAuthor('Volkman, B.F.');">Volkman, B.F.</a></p>
<p>
<b>Journal:</b>
(2002)
<span class="se_journal">Arch.Biochem.Biophys.</span>
<span class="se_journal"><b>399: </b>142-148</span>
</p>
表格中有更多内容,但不相关。我所知道的是我的期刊标题“Arch.Biochem.Biophys”位于“se_journal”类的跨度标签内。
所以我写了以下代码:
def JournalLookup():
PDBID= '1K48'
import requests
from bs4 import BeautifulSoup
session = requests.session()
req = session.get('http://www.rcsb.org/pdb/explore.do?structureId=%s' %PDBID)
doc = BeautifulSoup(req.content)
Journal = doc.findAll('span', class_="se_journal")
理想情况下,我可以使用 find 而不是 findAll,因为这是文档中仅有的两个,但我使用 findAll 至少验证我得到的是一个空列表。我假设它会返回一个包含两个带有“se_journal”类的跨度标签的列表,但它反而返回一个空列表。
在花了几个小时研究可能的解决方案(包括在 doc 中打印每个 span 的一段代码)之后,我得出的结论是 requests doc 根本不包含我想要的行。
有谁知道为什么会这样,我可以做些什么来解决它?
谢谢。