首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用刮伤法提出邮件请求

使用刮伤法提出邮件请求
EN

Stack Overflow用户
提问于 2014-05-10 20:30:23
回答 1查看 1.2K关注 0票数 2

我试图废除http://www.ncbi.nlm.nih.gov/pubmed的搜索结果。我在第一页上收集了所有有用的信息,但是我在第二页的导航中遇到了问题(第二页没有任何结果,请求中的一些参数丢失或错误)。

我的代码是:

代码语言:javascript
复制
 class PubmedSpider(Spider):
    name = "pubmed"
    cur_page = 1
    max_page = 3
    start_urls = [
            "http://www.ncbi.nlm.nih.gov/pubmed/?term=cancer+toxic+drug"
    ]

    def parse(self, response):
        sel = Selector(response)
        pubmed_results = sel.xpath('//div[@class="rslt"]')
        #next_page_url = sel.xpath('//div[@id="gs_n"]//td[@align="left"]/a/@    href').extract()[0]
        self.cur_page = self.cur_page + 1
        print 'cur_page ','*' * 30, self.cur_page

        form_data = {'term':'cancer+drug+toxic+',
                    'EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Entrez_Pager.Page':'results',
                    'email_subj':'cancer+drug+toxic+-+PubMed',
                    'EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Entrez_Pager.CurrPage':str(self.cur_page),
                    'email_subj2':'cancer+drug+toxic+-+PubMed',
                    'EntrezSystem2.PEntrez.DbConnector.LastQueryKey':'2',
                    'EntrezSystem2.PEntrez.DbConnector.Cmd':'PageChanged',
                    'p%24a':'EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Entrez_Pager.Page',
                    'p%24l':'EntrezSystem2',
                    'p%24':'pubmed',
                    }

        for pubmed_result in pubmed_results:
            item = PubmedItem()

            item['title'] = lxml.html.fromstring(pubmed_result.xpath('.//a')[0].extract()).text_content()
            item['link'] = pubmed_result.xpath('.//p[@class="title"]/a/@href').extract()[0]

            #modify following lines
            if self.cur_page < self.max_page:
                yield FormRequest("http://www.ncbi.nlm.nih.gov/pubmed/?term=cancer+toxic+drug",formdata = form_data,
                callback = self.parse2, method="POST")

            yield item

    def parse2(self, response):
        with open('response_html', 'w')as f:
            f.write(response.body)

在settings.py中启用了cookies

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 07:26:47

如果您在NCBI中搜索信息,为什么不使用为这类研究设计的E-实用程序呢?这将避免从站点返回的滥用通知(也许这种情况也发生在您的刮刀上)。

我知道这个问题已经很老了,但也可能会有人碰到同样的问题。

您的基本网址是:http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer+toxic+drug

您可以在这里找到查询参数的描述:http://www.ncbi.nlm.nih.gov/books/NBK25499/#chapter4.ESearch (关于每个查询的更多结果以及如何前进)

使用此API将使您能够使用其他一些工具和更新的Python 3。

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

https://stackoverflow.com/questions/23585992

复制
相关文章

相似问题

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