2017-02-17 20 views
-1

До сих пор я нашел, как очистить одну страницу или несколько страниц с одинаковым URL-адресом, но с изменением числа. Однако я не мог найти, как очистить страницы с подкатегориями и их подкатегориями и, наконец, получить необходимый контент. Я пытаюсь очистить этот сайт: http://www.askislam.org/index.html Я использую Scrapy, но я не знаю с чего начать. Или вы можете предложить лучший вариант, я просто использую python и проверяю оттуда.Сломка/обход нескольких страниц

Благодаря

# -*- coding: utf-8 -*- 
from scrapy.spiders     import CrawlSpider, Rule 
from scrapy.linkextractors   import LinkExtractor 
from scrapy.spiders     import Spider 
from scrapy       import Selector 
from ask_islam.items    import AskIslamItem 
from scrapy.http     import Request 
from scrapy.linkextractors   import LinkExtractor 
import re 

class AskislamSpider(Spider): 
    name = "askislam" 
    allowed_domains = ["askislam.org"] 
    start_urls = ['http://www.askislam.org/'] 
    rules = [Rule(LinkExtractor(allow =()), callback = 'parse', follow=True)] 

    def parse(self, response): 
     hxs = Selector(response) 
     links = hxs.css('div[id="categories"] li a::attr(href)').extract() 
     for link in links: 
      url = 'http://www.askislam.org' + link.replace('index.html', '') 
      yield Request(url, callback=self.parse_page) 

    def parse_page(self, response): 
     hxs = Selector(response) 
     categories = hxs.css('div[id="categories"] li').extract() 
     questions = hxs.xpath('a').extract() 
     if(categories): 
      for categoryLink in categories: 
       url = 'http://www.askislam.org' + categoryLink.replace('index.html', '') 
       yield Request(url, callback=self.parse_page) 
       # print (question) 

EDIT

def start_requests(self): 
    yield Request("http://www.askislam.org", callback=self.parse_page) 

def parse_page(self, response): 
    hxs = Selector(response) 
    categories = hxs.css('#categories li') 
    for cat in categories: 
     item = AskIslamItem() 
     link = cat.css('a::attr(href)').extract()[0] 
     link = "http://www.askislam.org" + link 

     item['catLink'] = link 

     logging.info("Scraping Link: %s" % (link)) 

     yield Request(link, callback=self.parse_page) 
     yield Request(link, callback=self.parse_categories) 

def parse_categories(self, response): 
    logging.info("The Cat Url") 
+0

Возможный дубликат http://stackoverflow.com/questions/30580974/how-to-crawl-links-on-all-pages-of-a-web-site-with-scrapy –

+0

Это может быть полезно чтобы дать некоторый код того, что вы можете очистить. Другим людям проще разрабатывать существующий код, чем создавать полный паук для вас. – Casper

ответ

1

Читать ссылки с этой http://www.askislam.org/index.html страницы с помощью XPath или CSS селекторов этих подкатегорий, а затем сделать еще один Request()

EDIT:

import logging 

class AskislamSpider(Spider): 

    name = "askislam" 

    def start_requests(self): 

     yield Request("http://www.askislam.org/", callback=self.parse_page) 

    def parse_page(self, response): 
     categories = response.css('#categories li').extract() 
     for cat in categories: 
      link = cat.css("a::attr(href)").extract()[0] 
      link = "http://www.askislam.org/" + link 

      logging.info("Scraping Link: %s" % (link)) 

      yield Request(link, callback=self.parse_page) 
+0

Но разве это не только повторение подкатегории один раз? Что я хочу сделать, это следовать ссылкам, пока на странице не существует тега div с id = категориями. –

+0

ИСПОЛЬЗУЙТЕ селекторов, чтобы увидеть, существует ли 'div # categories', если это произойдет, затем создайте другой' Request() '... thats it .. BTW, вы должны опубликовать код, который вы пробовали ... иначе мы не можем помочь – Umair

+0

Извините, я отправил код сейчас. –