2015-10-19 4 views
0

Я пытаюсь рекурсивно очистить данные с китайского веб-сайта. Я сделал своего паука, следуя URL-адресу «следующей страницы», пока не появится «следующая страница». Ниже мой паук:Рекурсивный скребок для скрипинга не удается выполнить сканирование всех страниц

import scrapy 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from hrb.items_hrb import HrbItem 


class HrbSpider(CrawlSpider): 
    name = "hrb" 
    allowed_domains = ["www.harbin.gov.cn"] 
    start_urls = ["http://bxt.harbin.gov.cn/hrb_bzbxt/list_hf.php"] 

    rules = (
     Rule(SgmlLinkExtractor(allow=(), restrict_xpaths=(u'//a[@title="\u4e0b\u4e00\u9875"]',)), callback="parse_items", follow= True), 
    ) 

    def parse_items(self, response): 
     items = [] 
     for sel in response.xpath("//table[3]//tr[position() > 1]"): 
      item = HrbItem() 
      item['id'] = sel.xpath("td[1]/text()").extract()[0] 

      title = sel.xpath("td[3]/a/text()").extract()[0] 
      item['title'] = title.encode('gbk') 

      item['time1'] = sel.xpath("td[3]/text()").extract()[0][2:12] 
      item['time2'] = sel.xpath("td[5]/text()").extract()[1] 

      items.append(item) 
     return(items)   

Проблема в том, что он только царапал первые 15 страниц. Я просмотрел страницу 15, и еще была кнопка «следующая страница». Так почему это остановилось? Предназначено ли оно для веб-сайта для предотвращения выскабливания? Или есть некоторые проблемы с моим кодом? И если нам разрешено только очищать 15 страниц за один раз, есть ли способ начать выскабливание с определенной страницы, скажем, Большое спасибо!

ответ

1

Джозеф,

Try анализ URL-адрес для страниц вашего паука соскоб и сравнить их с URL, ваш паук перестает скребковую в. Попробуйте удалить www. с вашего сайта в соответствующие поля. Вы можете разрешить попытку включить что-то вроде harbin.gov.cn/hrb_bzbxt/list_hf.php.* в набор разрешений SgmlLinkExtractor.

Надеюсь, это поможет.

Cheers !!