2015-10-26 1 views
1

Я пытаюсь очистить tripadvisor's website. Я использовал 2 подхода, первый из них - CrawlSpiders и Правила. Не так доволен результатом, теперь я пытаюсь использовать Selenium, чтобы пройти через все ссылки. Единственная проблема - проблема с разбивкой по страницам. Я хочу, чтобы браузер selenium открывал веб-страницу и просматривал каждую ссылку в starturl, а затем щелкнул следующую страницу внизу. До сих пор я написал код только для извлечения требуемого контента, как:scrapy selenium pagination

self.driver.get(response.url) 
    div_val = self.driver.find_elements_by_xpath('//div[@class="tab_contents"]') 
    for link in div_val: 
     l = link.find_element_by_tag_name('a').get_attribute('href') 
     if re.match(r'http:\/\/www\.tripadvisor\.com\/Hotels\-g[\d]*\-Dominican\_Republic\-Hotels\.html',l): 
      link.click() 
      time.sleep(5) 

       try: 
        hotel_links = self.driver.find_elements_by_xpath('//div[@class="listing_title"]') 
        for hotel_link in hotel_links: 
         lnk = hotel_link.find_element_by_class_name('property_title').get_attribute('href') 

       except NoSuchElementException: 
        print 'elemenotfound 

Я теперь застрял с пагинацией с селеном.

+0

можно автоматизировать при нажатии на следующую кнопку и дать паузу между запросами .Я думаю, что это будет хорошо работать для вас. Если я прав, вы хотите ввести каждую ссылку, такую ​​как список и извлечь данные, а затем заполнить все страницы, которые вы хотите нажать на следующую кнопку? –

ответ

1

Я думаю, что сочетание CrawlSpider и Selenium будет работать для вас -

for click in range(0,15):#clicking on next button for pagination 
    button = self.driver.xpath("/html/body/div[3]/div[7]/div[2]/div[7]/div[2]/div[1]/div[3]/div[2]/div/div/div[41]/div[2]/div/a") 

    button.click() 

    time.sleep(10) 

    for i in range(0,10):#range depends upon number of listings you can change it# for entering into the individual url using response 
      item['url'] = response.xpath('a[contains(@class,"property_title ")]/@href').extract()[i] 
      if item['url']: 
                if 'http://' not in item['url']: 
                 item['url'] = urljoin(response.url, item['url']) 
                yield scrapy.Request(item['url'], 
                     meta={'item': item}, 
                     callback=self.anchor_page) 


       def anchor_page(self, response): 

        old_item = response.request.meta['item'] 

        data you want to scrape 
        yield old_item 
Смежные вопросы