Ergebnis 1 bis 2 von 2
  1. #1
    Trojaner
    Registriert seit
    06.04.2015
    Beiträge
    56

    Standard Scrapy soll nächste seite crawln

    Hi,

    ich möchte mit dem framework scrapy gerne eine seite mit folge seiten crawln.
    Leider funktioniert es nicht.
    Kann mir jemand sagen warum?

    HTML-Code:
    import scrapy
    from scrapy.contrib.linkextractors import LinkExtractor
    from scrapy.contrib.spiders import CrawlSpider, Rule
    from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
    from scrapy.spider import Spider
    from scrapy import Selector
    from scrapy.selector import HtmlXPathSelector
    from craigslist_sample.items import CraigslistSampleItem
    
    import urlparse 
    from scrapy.http.request import Request
    
    class MySpider(Spider):
    name = "craig"
    allowed_domains = ["example.de"]
    start_urls = ["www.example.com"]
    
    
    rules = (Rule (SgmlLinkExtractor(allow=("Seite-\d00", ),restrict_xpaths=('//a',))
    , callback="parse", follow= True),
    )
    def parse(self, response):
        hxs = Selector(response)
    
        ne = HtmlXPathSelector(response)
    
        next_page = ne.select("//td[@class='pagerNextlink']/a/@href").extract()
    
        titles  = hxs.xpath('//table[@class="list"]/tr')
        section = hxs.select('//div[@id="productListFilterContainer"]')
        items   = []
        for title in titles:
            item             = CraigslistSampleItem()
            item ["section"] = section.select('div/h2/text()').extract()
            item ["preis"]   = title.xpath('td/div[@style="margin-bottom:5px;"]/text()').extract()
    
            if not item ["preis"]:
               item ["preis"] = title.xpath('td/div[@style="margin-bottom:5px;color:#F00;"]/text()').extract()
    
            item ["title"]   = title.xpath("td/a/text()").extract()
            item ["link"]    = title.xpath('td/a/@href').extract()
    
    
            if not item ["preis"]:
               pass
            else:
               items.append(item)
        return items
    Leider funktioniert das nicht.

    es gibt auf der seite einen next button der example.de/Seite-2 aufruft.

    die soll er halt auch crawln

  2. #2
    Trojaner Avatar von H4wk
    Registriert seit
    01.05.2015
    Beiträge
    56

    Standard AW: Scrapy soll nächste seite crawln

    Wenn ich das richtig in Erinnerung habe, solltest du probieren
    a) entweder den Button zu "klicken" um so auf die nächste Seite zu kommen und dann mit einer for Schleife erneut deinen Crawler aufzurufen
    b) nochmal deine Vorgehensweise zu überdenken.

    Ich würde das ganze in Liclipse programmieren und den Crawler und die Seitenaufrufe trennen. Du kannst ja aus einer Textdatei die zu crawlenden Seiten
    aufrufen und dann den eigentlichen Crawler losschicken. So wie sich dein Text anhört, willst du das Skript ja öfter benutzen.
    Vorteil: Du suchst gezielter und dein Code ist nicht nur für eine Seite verwendbar (die Buttonklick seite die du meintest)
    Nachteil: Du musst wissen auf was für Seiten dein Programm suchen soll.

    Vorschlag: Du kannst noch eine Keywordsuche einbauen, aber wahrscheinllich ist das schon zuviel des Guten.


    Mit vielen Grüßen,

    ~H4wk

Ähnliche Themen

  1. Phishing, ein problem jagt das nächste...
    Von ponkel im Forum Phishing
    Antworten: 3
    Letzter Beitrag: 04.07.2012, 08:46
  2. ...und die nächste CD wartet schon
    Von sTalk3er im Forum Globale News / Szene News
    Antworten: 5
    Letzter Beitrag: 01.03.2010, 06:02
  3. Das nächste Volumen wird benötigt
    Von SMiN.t im Forum Sicherheit
    Antworten: 9
    Letzter Beitrag: 02.08.2008, 04:10
  4. [S] Die Siedler II: Die nächste Generation
    Von meteor45 im Forum Games
    Antworten: 1
    Letzter Beitrag: 26.01.2008, 16:38
  5. nächste Sig - ganz einfach
    Von styl0r^ im Forum GFX Showroom
    Antworten: 1
    Letzter Beitrag: 28.05.2007, 00:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •