PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Scrapy soll nächste seite crawln



Alpha63
22.04.2015, 19:16
Hi,

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


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

H4wk
07.05.2015, 12:25
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