2014-05-10 2 views
2

http://www.ncbi.nlm.nih.gov/pubmed의 검색 결과를 스크랩하려고합니다. 나는 첫 페이지에 모든 유용한 정보를 모았지만 두 번째 페이지의 탐색에 문제가 있습니다 (두 번째 페이지에는 아무런 결과가 없으며 요청에 따라 일부 매개 변수가 누락되거나 잘못되었습니다).스크래치로 POST 요청하기

내 코드는 다음과 같습니다 당신이 연구의 이러한 유형의 디자인 E-유틸리티를 사용하지 않는 이유를 정보 NCBI를 검색하는 경우

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

답변

0

에서 활성화? 이렇게하면 사이트에서 반환 된 악용 사례 알림을 피할 수 있습니다 (아마 이것은 스크레이퍼에서도 발생했습니다).

나는

귀하의 기본 URL이 될 것이다 ... 그러나 그것은 누군가가 같은 질문에 실수를 한단다 일이 발생할 수 있습니다, 문제는 아주 오래 알고 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도 사용할 수 있습니다.