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