2016-04-17 7 views
1

Es zeigt den Höchstpreis für eine Wohnung ist 4700 $ wenn der Höchstpreis, wie ich sehe, etwas über eine Million ist. Warum zeigt es das nicht? Was mache ich falsch?Web Verschrottung craigslist Wohnung Preise in Python nicht zeigt höchste Kosten Wohnung

import requests 
import re 


r = requests.get("http://orlando.craigslist.org/search/apa") 
r.raise_for_status() 

html = r.text 


matches = re.findall(r'<span class="price">\$(\d+)</span>', html) 
prices = map(int, matches) 


print "Highest price: ${}".format(max(prices)) 
print "Lowest price: ${}".format(min(prices)) 
print "Average price: ${}".format(sum(prices)/len(prices)) 
+0

Gibt es auf dieser Seite angezeigt werden, wenn Sie es in Ihrem Browser aufrufen? Es hat nicht für mich getan. – usr2564301

+0

ach so wird es nur den höchsten Preis auf der Titelseite zeigen? Es tut mir leid, ich wusste nicht, dass meine Entschuldigungen – PostMagne

+1

Eine Randnotiz: Sie sollten einen HTML-Parser wie BeautifulSoup zum Parsen von HTML, nicht Regex verwenden – Keatinge

Antwort

1

einen HTML-Parser verwenden bs4 sehr einfach zu bedienen ist, können Sie nach Preis bestellen können ?sort=pricedsc auf die URL durch Zugabe so das erste Spiel der max sein wird und der letzte wird das die niedrigste (für diese Seite) zuletzt :

r = requests.get("http://orlando.craigslist.org/search/apa?sort=pricedsc") 
from bs4 import BeautifulSoup 

html = r.content 

soup = BeautifulSoup(html) 
print "Highest price: ${}".format(prices[0]) 
print "Lowest price: ${}".format(prices[-1]) 
print "Average price: ${}".format(sum(prices, 0.0)/len(prices)) 

Wenn Sie den niedrigsten Preis wollte man braucht, um zu bestellen aufsteigend:

r = requests.get("http://orlando.craigslist.org/search/apa?sort=priceasc") 
from bs4 import BeautifulSoup 

html = r.content 

soup = BeautifulSoup(html) 
prices = [int(pr.text.strip("$")) for pr in soup.select("span.price")] 
print "Highest price: ${}".format(prices[-1]) 
print "Lowest price: ${}".format(prices[0]) 
print "Average price: ${}".format(sum(prices, 0.0)/len(prices)) 

Jetzt ist die Ausgabe sehr unterschiedlich:

Highest price: $70 
Lowest price: $1 
Average price: $34.89 

Wenn Sie den Durchschnitt für alle benötigen Sie mehr Logik hinzufügen möchten. Standardmäßig sehen Sie nur 100 of 2500 Ergebnisse, aber das können wir ändern.

r = requests.get("http://orlando.craigslist.org/search/apa") 
from bs4 import BeautifulSoup 

html = r.content 

soup = BeautifulSoup(html) 
prices = [int(pr.text.strip("$")) for pr in soup.select("span.price")] 

# link to next 100 results 
nxt = soup.select_one("a.button.next")["href"] 

# keep looping until we find a page with no next button 
while nxt: 
    url = "http://orlando.craigslist.org{}".format(nxt) 
    r = requests.get(url) 
    soup = BeautifulSoup(r.content) 
    # extend prices to our list 
    prices.extend([int(pr.text.strip("$")) for pr in soup.select("span.price")]) 
    nxt = soup.select_one("a.button.next") 
    if nxt: 
     nxt = nxt["href"] 

, die Ihnen jeden Eintrag von 1-2500

Verwandte Themen