首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用漂亮的汤导航到下一页

使用漂亮的汤导航到下一页
EN

Stack Overflow用户
提问于 2015-02-14 14:20:16
回答 1查看 882关注 0票数 1

如何使用漂亮的汤浏览所有页面的结果。例如,我必须刮这个网站:

http://www.ncbi.nlm.nih.gov/pubmed

搜索查询是

“((肿瘤学)和乳腺癌)并导致”

没有引号。

我怎么把所有的页都取下来?我试着查看请求头中的表单数据。试着修改一些字段。我可以修改它得到200个条目每页。但不会再有了。实际上,我需要遍历页面来获取所有内容。任何帮助都将不胜感激。

假设现在,我只想看看第四页。

守则的有关部分:

代码语言:javascript
复制
post_params = {
    'term' : val,
         'EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Pubmed_DisplayBar.PageSize' : 20,
'EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Pubmed_DisplayBar.sPageSize' : 20,
'coll_start' : 61,
'citman_count' : 20,
'citman_start' : 61,
'coll_start2' : 61,
'citman_count2' : 20,
'citman_start2' : 61,
'CollectionStartIndex': 1,
'CitationManagerStartIndex' : 1,
'CitationManagerCustomRange' : 'false',

'EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Entrez_Pager.cPage' : 3,
'EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Entrez_Pager.CurrPage' : 4,

}

"""This part handles the scraping business"""
post_args = urllib.urlencode(post_params)
baseurl = 'http://www.ncbi.nlm.nih.gov'
url = 'http://www.ncbi.nlm.nih.gov/pubmed/'
page = urllib2.urlopen(url, post_args)
page = page.read()
soup = BeautifulSoup(page)
soup.prettify()

它仍然获取第一页。一旦这个部分成功了,我正在考虑迭代这段代码,每次修改params。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-14 15:45:33

永远不要刮PubMed --总是有一种更简单的直接检索数据的方法。安装并使用BioPython包。下面是一个使用查询获取前10篇论文的简单脚本:

代码语言:javascript
复制
from Bio import Entrez, Medline

# Always tell NCBI who you are  
Entrez.email = "your_address@example.com"  

term="((oncology) AND breast cancer) AND resulted in"

handle = Entrez.esearch(db="pubmed", retmax=10, term=term)
record = Entrez.read(handle)

print record['Count']  # see how many hits in your search

for ref in record['IdList']:
    handle = Entrez.efetch(db="pubmed", id=ref, 
                           rettype="Medline", 
                           retmode="text")
    paper = Medline.read(handle)
    # Medline returns a dict from which we can extract the 
    # fields we desire
    print '-' * 30
    print paper['TI']
    print
    print paper['AB']

手册很广泛,但是您只需要阅读有关使用BioPython Entrez搜索和获取记录以及用BioPython Medline解析结果的部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28516514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档