2014-05-10 2 views
2

Я пытаюсь отменить результаты поиска http://www.ncbi.nlm.nih.gov/pubmed. Я собрал всю полезную информацию на первой странице, но у меня проблемы с навигацией второй страницы (вторая страница не имеет результата, некоторые параметры в запросе отсутствуют или ошибочны).создание запроса POST с использованием scrapy

Мой код:

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-утилиты, предназначенные для данного типа исследования? Это позволит избежать уведомлений о злоупотреблениях, возвращаемых с сайта (возможно, это произошло и с вашим скребком).

Я знаю, что вопрос довольно старый, однако это может случиться так, что кто-то натыкается на тот же вопрос ...

Ваш базовый 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.

Смежные вопросы