2015-11-12 2 views
1

Im пытаясь соскрести список всех отелей в Сан-Франциско из: http://www.tripadvisor.com/Hotels-g60713-San_Francisco_California-Hotels.htmlправила Scrapy crawlSpider - приоритетность «следующей страницы»

«ЗАТЕМ Отели» имеет уникальные URLs:

страница 2 является: /Hotels-g60713-oa30-San_Francisco_California-Hotels.html

страница 3: /Hotels-g60713-oa60-San_Francisco_California-Hotels.html

страница 4:/Отели-g60713-oa90-San_Francisco_California-отели .html

и так далее ..

  1. Как я могу установить crawlSpider, чтобы достигнуть этих страниц
  2. Есть ли правила, которые могут помочь мне в этом случае?
  3. Есть ли способ определить приоритеты и заставить его очистить и проанализировать эти страницы раньше всего?

мой код до сих пор:

импорт beatSoup_test импорт SCRAPY из scrapy.contrib.spiders импорта CrawlSpider, правило из scrapy.contrib.linkextractors.sgml импорта SgmlLinkExtractor

class TriAdvSpider(CrawlSpider): 
    name = "tripAdv" 
    allowed_domains = ["tripadvisor.com"] 
    start_urls = [ 
    "http://www.tripadvisor.com/Hotels-g60713-San_Francisco_California-Hotels.html" 
    ] 
    rules = (
     Rule(SgmlLinkExtractor(allow=r'-\w+.html$'), callback='parse_item', follow=True), 
    ) 


    def parse_item(self, response): 
     beatSoup_test.getHotels(response.body_as_unicode()) 

где beatSoup_test - это моя функция синтаксического анализа, которая использует beautifulsoup. Спасибо!

ответ

1

Если вы хотите очистить данные с любой страницы. Используйте Xpath Таким образом, вы можете очистить все на одной странице.

И используйте пункты для хранения скребковых данных, чтобы вы могли очистить столько, сколько хотите.

Вот пример того, как вы можете его использовать.

sites = Selector(text=response.body).xpath('//div[contains(@id, "identity")]//section/div/div/h3/a/text()') 
    items = [] 
    items = myspiderBotItem() 
    items['title'] = sites.xpath('/text()').extract() 

Как это

class TriAdvSpider(CrawlSpider): 
    name = "tripAdv" 
    allowed_domains = ["tripadvisor.com"] 
    start_urls = [ 
    "http://www.tripadvisor.com/Hotels-g60713-San_Francisco_California-Hotels.html" 
    ] 
    rules = (
     Rule(SgmlLinkExtractor(allow=r'-\w+.html$'), callback='parse_item', follow=True), 
    ) 


    def parse_item(self, response): 
     # beatSoup_test.getHotels(response.body_as_unicode()) 
     l = XPathItemLoader(item = TriAdvItem(),response = response) 
     for i in range(1,8): 

      l.add_xpath('day','//*[@id="super-container"]/div/div[1]/div[2]/div[2]/div[1]/table/tbody/tr['+str(i)+']/th[@scope="row"]/text()') 
      l.add_xpath('timings1','//*[@id="super-container"]/div/div[1]/div[2]/div[2]/div[1]/table/tbody/tr['+str(i)+']/td[1]/span[1]/text()') 
      l.add_xpath('timings2','//*[@id="super-container"]/div/div[1]/div[2]/div[2]/div[1]/table/tbody/tr['+str(i)+']/td[1]/span[2]/text()') 
     return l.load_item()