0

단백질의 4 글자 PDBID 만 제공된 Protein Data Bank의 원본 인용 자료에 대한 구체적인 정보를 얻으려고합니다.Python & BeautifulSoup를 사용하여 RCSB 페이지에서 저널 제목을 가져오고 싶습니다.

이렇게하려면 파이썬 라이브러리 요청과 BeautifulSoup을 사용하고 있습니다. 코드를 작성하려고하면 특정 단백질 (이 경우 1K48)의 페이지로 이동하고 페이지의 HTML도 저장합니다 (명령 + s를 누르고 HTML을 내 바탕 화면에 저장). 주의 할

우선 일 :

1)이 페이지의 URL은 다음과 같습니다 http://www.rcsb.org/pdb/explore.do?structureId=1K48

2) 당신은 적절한 PDBID와 마지막 네 문자를 대체하여 어떤 단백질 페이지로 얻을 수 있습니다.

3) 나는 그들이 처음 등장 저널에 의해 큰 목록을 정렬하기 위해, 많은 PDBIDs에서이 절차를 수행 할 것입니다은. HTML을 통해 검색

4), 하나는 저널 제목을 찾습니다 아래 양식에 있습니다.

<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(&#39;Skjeldal, L.&#39;);">Skjeldal, L.</a>,&nbsp;&nbsp;<a class="sePrimarycitations se_searchLink" onclick="searchCitationAuthor(&#39;Gran, L.&#39;);">Gran, L.</a>,&nbsp;&nbsp;<a class="sePrimarycitations se_searchLink" onclick="searchCitationAuthor(&#39;Sletten, K.&#39;);">Sletten, K.</a>,&nbsp;&nbsp;<a class="sePrimarycitations se_searchLink" onclick="searchCitationAuthor(&#39;Volkman, B.F.&#39;);">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") 

가 이상적으로 나는이 문서에서 유일하게 두 가지로 대신 findall은의 발견 사용할 수있을 것입니다,하지만 난 적어도 내가 확인을 findall은 사용 빈 목록 가져 오는 중. 클래스 "se_journal"과 함께 두 개의 span 태그를 포함하는 목록을 반환 하겠지만 대신 빈 목록을 반환한다고 가정했습니다.

doc에서 모든 범위를 인쇄하는 코드 조각을 포함하여 가능한 해결책을 여러 시간 동안 보냈다가 요청한 문서에 원하는 줄이 포함되어 있지 않다고 결론을 냈습니다.

누구에게 이것이 왜 그런지, 그리고 내가 그것을 고칠 수있는 가능성을 알 수 있습니까?

감사합니다.

답변

1

관심있는 콘텐츠는 자바 스크립트에서 제공됩니다. 쉽게 찾아 볼 수 있으며 자바 스크립트가 비활성화 된 브라우저에서 동일한 URL을 방문하면 특정 정보가 표시되지 않습니다. 또한 친절한 메시지를 표시

"이 브라우저는 자바 스크립트가 활성화되지 않는 것 또는이 꺼진이 사이트는 자바 스크립트없이 제대로 작동하지 않습니다 .."

자바 스크립트 기반 페이지의 경우 Python 요청을 사용할 수 없습니다. 몇 가지 대안이 있는데, 하나는 dryscape입니다.

PS : 함수 내에서 라이브러리/모듈을 가져 오지 마십시오. 파이썬은 추천하지 않으며 PEP08는 말한다 :

수입이 언제나 모든 모듈의 의견과 문서화 문자열 후, 및 모듈 전역 상수 전에 파일의 맨 위에 배치됩니다.

This SO question은 왜 그렇게하는 것이 권장되지 않는지 설명합니다.

+0

감사합니다. 나는 결국 다른 [SO 질문] (http://stackoverflow.com/questions/25984782/using-requests-and-beautifulsoup-python-returns-tag-with-no-text?rq=1)을 기반으로 자바 스크립트 문제를 해결했습니다.). 필자의 경우 특정 응용 프로그램이 관련 PDB 파일을 이미 다운로드하여 저장했기 때문에 PDB 파일 자체에서 저널 제목을 긁어내는 것이 가장 좋은 해결책으로 밝혀졌습니다. 가져 오기 주셔서 감사합니다. 나는 지난 5 개월 동안 완전히 독학을하고 스타일 가이드를 보느라 시간을 보지 못했습니다. –

+0

그것은 당신을 위해 일했기 때문에 다행! – avi

1

방금이 작업을 수행 할 수있는 PyPDB라는 Python 패키지를 게시했습니다. 저장소는 here을 찾았지만 내가 입력으로 4 문자 PDB ID를 취하고 포함 된 사전을 반환하는 기능 describe_pdb을 시도 할 것입니다, 당신의 응용 프로그램에 대해 PyPI

pip install pypdb 

에서도 볼 수 있습니다 항목과 관련 메타 데이터 :

my_desc = describe_pdb('4lza') 

이 my_desc 필드가 'citation_authors', 'structure_authors'및 '제목'에 대한,하지만 모든 항목이 그들과 관련된 저널 타이틀을 가지고있는 것 같습니다. 다른 옵션은보다 광범위한 함수 get_all_info('4lza')을 사용하거나 원시 .pdb 파일 전체를 가져 오기 (및 구문 분석)하는 것입니다. get_pdb_file('4lza', filetype='cif', compression=True)

관련 문제