kratzen Sie über die website mit href-Verweise
Ich bin mit scrapy, und ich will kratzen durch www.rentler.com. Ich habe gegangen, um die website und suchte nach der Stadt, ich bin interessiert, und hier ist der link von dem suchergebnis:
https://www.rentler.com/search?Location=millcreek&MaxPrice=
Nun, alle Listen, die ich bin daran interessiert, enthalten sind auf dieser Seite, und ich möchte rekursiv durch den Schritt, eins nach dem anderen.
Jede Liste ist aufgeführt unter:
<body>/<div id="wrap">/<div class="container search-res">/<ul class="search-results"><li class="result">
jedes Ergebnis hat eine <a class="search-result-link" href="/listing/288910">
Ich weiß, daß ich eine Regel erstellen, für die crawlspider und haben es anschauen, href und hängen Sie an die url. So könnte es gehen auf jeder Seite, und schnappen Sie sich, dass Daten, die mich interessiert.
Ich glaube, ich brauche so etwas wie dieses:
rules = (Rule(SgmlLinkExtractor(allow="not sure what to insert here, but this is where I think I need to href appending", callback='parse_item', follow=true),)
UPDATE
*Danke für den input. Hier ist, was ich jetzt habe, scheint es zu laufen, aber nicht kratzen:*
import re
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from KSL.items import KSLitem
class KSL(CrawlSpider):
name = "ksl"
allowed_domains = ["https://www.rentler.com"]
start_urls = ["https://www.rentler.com/ksl/listing/index/?sid=17403849&nid=651&ad=452978"]
regex_pattern = '<a href="listing/(.*?) class="search-result-link">'
def parse_item(self, response):
items = []
hxs = HtmlXPathSelector(response)
sites = re.findall(regex_pattern, "https://www.rentler.com/search?location=millcreek&MaxPrice=")
for site in sites:
item = KSLitem()
item['price'] = site.select('//div[@class="price"]/text()').extract()
item['address'] = site.select('//div[@class="address"]/text()').extract()
item['stats'] = site.select('//ul[@class="basic-stats"]/li/div[@class="count"]/text()').extract()
item['description'] = site.select('//div[@class="description"]/div/p/text()').extract()
items.append(item)
return items
Gedanken?
InformationsquelleAutor SMPLGRP | 2013-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen, um zu kratzen, Daten aus einem html-Dateien, was dann der Fall ist, würde ich empfehlen, mit BeautifulSoup, es ist sehr einfach zu installieren und zu verwenden:
Diesem kleinen script alle
href
innerhalba
HTML-tag.Edit: Voll funktionsfähige Skript:
Getestet habe ich diese auf meinem computer, und das Ergebnis war wie erwartet, BeautifulSoup Bedürfnisse plain HTML und können Sie kratzen, was Sie brauchen out of it, werfen Sie einen Blick auf diese code:
Dass nur zeigt, wie Sie kratzen href aus der html-Seite, die Sie versuchen zu kratzen, natürlich können Sie es verwenden, innen scrapy, wie ich Ihnen sagte, BeautifulSoup braucht nur einfaches HTML, das ist, warum ich
requests.get(url).text
und können Sie kratzen. Also ich denke, scrapy kann passieren, dass einfach HTML zu BeautifulSoup.Edit 2
Ok, schau, ich glaube nicht, dass Sie brauchen, scrapy an alle, also, wenn Sie die Vorherige Skript bekommt Ihr alle die links, die Sie wollen, um Daten aus arbeiten, müssen Sie nur etwas wie das hier tun:
angenommen, ich habe eine gültige Liste von urls ich möchte bestimmte Daten, beispielsweise Preis, Hektar, Adresse... hätte Man dies mit dem vorherigen script, statt nur Druck-urls auf dem Bildschirm konnte man hängt Sie an eine Liste, und fügen nur diejenigen, die beginnen mit
/listing/
. So haben Sie eine gültige Liste von urls.Müssen Sie nur den Quellcode anschauen und Sie erhalten die Idee, wie Sie kratzen Sie die Daten, die Sie benötigen, aus jeder einzelnen url.
Werfen Sie einen Blick auf das neue Beispiel, versuchen Sie es in Ihrem computer, wie es ist und die Ergebnisse sehen.
Das ist toll @PepperoniPizza. Ich habe das Skript ausgeführt und es funktionierte wie erwartet. Jetzt muss ich hinzufügen das in Scrapy und füttern Sie diese Ergebnisse. Ich habe KEINE Ahnung, wie/wo zu beginnen. Können Sie mir einen Zeiger oder ein Ort, um zu starten?
Sind Sie Schaben nur links aus dem rentler.com/search?Location=millcreek&MaxPrice= ?
Sie können dieses Skript auf einem beliebigen html-und es wird hier finden Sie die links raus, ich weiß wirklich nicht, wie Sie helfen mehr, es ist gerade einfach glaube ich.
InformationsquelleAutor PepperoniPizza
Können Sie einen regulären Ausdruck verwenden, um herauszufinden, alle Miet-home-ids aus den links. Von dort aus können Sie die ids, die Sie haben und kratzen, die Seite statt.
EDIT:
Hier ist ein arbeiten-auf-seinen-eigenen-version des Codes. Es druckt alle link-ids. Sie können es verwenden, wie Sie ist.
Ich glaube ich hab den Fehler gefunden @benknighthorse. Sie setzen den link in re.findall(). Stattdessen, Sie brauchen, um den Quellcode der Seite. Ich weiß nicht, wie Ihre getan, mit scrapy, aber es ist wahrscheinlich nicht schwer.
Danke für die schnelle Antwort @GKBRK. Was genau ist SOURCE_OF_THE_RENTLER_PAGE ?
Es ist die Seite, die HTML-Quelle. Sie können sehen, mein edit für die, wie es zu benutzen.
InformationsquelleAutor GKBRK