2015-12-31 2 views
-1
# -*- coding: utf-8 -*- 

__author__ = 'onecue' 

import scrapy 

from community.items import CommunityItem 
from datetime import datetime 
import re 

class CommunitySpider(scrapy.Spider): 
    name = "communityCrawler" 

    start_urls = [] 

    def start_requests(self): 
     for i in range(1, 2, 1): 
      yield scrapy.Request("http://www.clien.net/cs2/bbs/board.php?bo_table=park&page=%d" % i, self.parse_clien) 
      yield scrapy.Request("http://www.bobaedream.co.kr/list?code=freeb&page=%d" % i, self.parse_bobae) 

    def parse_clien(self, response): 
     for sel in response.xpath('//tbody/tr[@class="mytr"]'): 
      item = CommunityItem() 
      item['Title'] = sel.xpath('td[@class="post_subject"]/a/text()').extract()[0] 
      dateTmp = datetime.strptime(sel.xpath('td/span/@title').extract()[0], "%Y-%m-%d %H:%M:%S") 
      td = sel.xpath('td') 
      item['Description'] = dateTmp.strftime("%Y-%m-%d %H:%M:%S") 

      yield item 

    def parse_bobae(self, response): 
     for sel in response.xpath('//tbody/tr[@itemtype="http://schema.org/Article"]'): 
      item = CommunityItem() 

      date_now = datetime.now() 

      date_str_tmp = sel.xpath('td[@class="date"]/text()').extract()[0] 

      prog = re.compile('[0-9]{2}:[0-9]{2}') 
      if prog.match(date_str_tmp): 
       date_str = date_now.strftime('%y/%m/%d') +' ' + date_str_tmp + ':00' 
      else: 
       date_str = date_now.strftime('%y/') + date_str_tmp +' ' + '00:00:00' 

      dateTmp = datetime.strptime(date_str,"%y/%m/%d %H:%M:%S") 

      item['Title'] = sel.xpath('td[@class="pl14"]/a/text()').extract()[0] 
      item['Description'] = dateTmp.strftime("%Y-%m-%d %H:%M:%S") 

      yield item 

Я создал обходного гусеничного сообщества, но он просто просматривает страницу по правилам, которые я сделал. Я хочу сделать сканер, который сканирует весь веб-сайт, как веб-паук Google. Как я могу это сделать?Как просканировать весь сайт по scrapy

+1

читать документацию. Вся необходимая информация - например [CrawlSpider] (http://doc.scrapy.org/en/latest/topics/spiders.html#crawlspider) или [LinkExtractor] (http://doc.scrapy.org/en/ последние/темы/link-extractors.html). – furas

ответ

0

См. Ниже код и попытайтесь понять концепцию. Обратите внимание, что этот код не протестирован, поэтому вам нужно будет пойти и проверить особенно x-пути, но, надеюсь, это даст вам представление о том, как это работает. Вы не можете сделать это Google путь на 1-й поход - Scrapy очень хорош, но не так :) Пожалуйста, прочитайте больше документов, все там, требует немного терпения.

# start just one website at a time to get the concept 
start_urls = ["http://www.clien.net/cs2/bbs/board.php?bo_table=park&page=%d"] 


# def parse(self, response) should be the first method you call 
# to get response from the link defined in start_urls 

def parse(self, response): 
    # here you look for links on the website defined in your start_urls 
    for sel in xpath('//td[@class=""post_subject"]/a/@href)'): 
     links = response.urljoin(sel.extract()[0]) 
     yield Scrapy.Request(self, callback=self.parsenextlevel) 


def parsenextlevel(self, response)) 
    # here you parse items from the links that were retrieved in parse method, 
    # so e.g. links in http://www.clien.net/cs2/bbs/board.php?bo_table=park&wr_id=30438421 
    # or in http://www.clien.net/cs2/bbs/board.php?bo_table=park&wr_id=1068932.  
    # If you need to dig deeper you need to keep nesting the requests in further callbacks 
    item = CommunityItem() 
    item['Title'] = sel.xpath("//div[@class="view_title"]/h4/span/text()").extract() 
    yield item 

Edit: лучший способ вызова parsenextlevel обратного вызова будет назвать его parseitem, потому что это то, что делается в примере, но это имя, которое вы определяете себя так или иначе.

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