2014-05-10 34 views
2

我試圖取消http://www.ncbi.nlm.nih.gov/pubmed的搜索結果。我在第一頁收集了所有有用的信息,但我在第二頁的導航中遇到問題(第二頁沒有任何結果,請求中的某些參數缺失或錯誤)。使用scrapy發出POST請求

我的代碼是:

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

如果您搜索的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。