2017-02-17 8 views
-1

Bis jetzt habe ich gefunden, wie man eine Seite oder mehrere Seiten mit derselben URL, aber ändernder Zahl schabt. Jedoch konnte ich nicht finden, wie man Seiten mit Unterkategorien und ihren Unterkategorien kratzt und schließlich den benötigten Inhalt erhält. Ich versuche, diese Website zu kratzen: http://www.askislam.org/index.html Ich benutze Scrapy, aber ich weiß nicht, wo ich anfangen soll. Oder Sie können eine bessere Option vorschlagen, verwende ich einfach Python und von dort aus überprüfen.Mehrere Seiten scrappen/crawlen

Dank

# -*- 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

Mögliche Duplikat http://stackoverflow.com/questions/30580974/how-to-crawl-links-on-all-pages-of-a-web-site-with-scrapy –

+0

Es könnte hilfreich sein, um einen Code zu geben, was Sie in der Lage sind zu kratzen. Es ist einfacher für andere Leute, bestehenden Code zu entwickeln, als eine vollständige Spinne für Sie zu erstellen. – Casper

Antwort

1

lesen Links von dieser http://www.askislam.org/index.html Seite xPath oder CSS-Selektoren dieser Untergruppen verwenden und dann ein anderes tun 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

Aber würde das nicht nur die Unterkategorie einmal iterieren? Ich möchte den Links folgen, bis ein Div-Tag mit ID = Kategorien auf der Seite nicht existiert. –

+0

USE Selektoren, um zu sehen, ob 'div # categories' existiert, wenn es so ist, dann ein' Request() '... das ist es .. BTW sollten Sie etwas Code, den Sie ausprobiert haben ... sonst können wir nicht helfen – Umair

+0

Entschuldigung, ich habe den Code jetzt gepostet. –