2017-05-19 5 views
0

Ich habe einen Code geschrieben, um Name, Link und Preis von craigslist zu analysieren. Wenn ich das Ergebnis drucke, werden diese als Liste gekratzt. Ich habe versucht, wie der eingefügte Code unten einen Workaround zu bekommen, aber es gibt falsche Tripel, besonders wenn ein Wert keine ist, erhält es den nächsten verfügbaren Wert von einem anderen Tripel und so weiter. Aus diesem Grund ist es in diesem Fall nicht von Nutzen. Ich hoffe, ich habe einen Vorschlag, wie ich das erreichen kann, egal ob es Itertools oder andere Methoden sind.Itertools in web_crawler geben falsche Tripel

import requests 
from lxml import html 
from itertools import zip_longest 

Page_link="http://bangalore.craigslist.co.in/search/rea?s=120" 
def parsing_craigslist(url): 
    response = requests.get(url) 
    tree = html.fromstring(response.text) 
    title = tree.xpath("//p[@class='result-info']//a[contains(concat(' ', @class, ' '), ' result-title ')]/text()") 
    link = tree.xpath("//p[@class='result-info']//a[contains(concat(' ', @class, ' '), ' result-title ')]/@href") 
    price = tree.xpath("//p[@class='result-info']//span[@class='result-price']/text()") 
    for i,j,k in zip_longest(title,link,price,fillvalue=None): 
     print(i,j,k) 

parsing_craigslist(Page_link) 
+0

sehen sie getrennt wie, 'title' auf einer Zeile dann' link' auf einem anderen dann 'price' auf einem dritten? Verwenden Sie einfach drei 'print' Anweisungen oder verwenden Sie' pprint'. –

+0

Danke Tadhg McDonald-Jensen für Ihre Antwort. Es tut mir schrecklich leid, dass ich nicht in der Lage war zu klären, wie der Output sein sollte. Jetzt kannst du sehen. – SIM

+0

Ich habe dein Scraping versucht, es funktioniert, ich benutze zip: 'für i, j, k in zip (Titel, Link, Preis):' Was ist dein Problem? –

Antwort

1

Meine Neigung ist es, die Schwierigkeiten zu vermeiden, die bei dem Versuch, entsprechen Sammlungen von zwei xpath Abfragen mit einem zip, indem Sie eine Tiefensuche und dann prüft jeden Eintrag, wie hier entstehen könnten.

import requests 
from lxml import html 

page = requests.get('http://bangalore.craigslist.co.in/search/rea?s=120').text 
tree = html.fromstring(page) 
rows = tree.xpath('.//li[@class="result-row"]') 
for n, row in enumerate(rows): 
    price = row.xpath('.//a/span/text()')[0][1:] 
    link = row.xpath('.//p/a')[0] 
    title = link.text 
    url = link.attrib['href'] 
    print ('--->', title) 
    print (price, ':', url) 
+0

Danke Sir Bill Bell, für Ihre Antwort. Es ist eine gute Alternative. Als Anfänger ist es schwer für mich, eine Sache in deinem Skript zu verstehen. Im Preis haben Sie [0] [1:] verwendet. Was bedeutet [1:] besonders, wenn es nach [0] platziert wird. Entschuldige meine Unwissenheit. Ich werde deine Antwort bald annehmen. – SIM

+0

Oh, den Zahlen im Preis geht ein Symbol für Rupien voraus, was ein wenig schwierig zu handhaben ist. Wir wissen, was die Währung ist, also habe ich beschlossen, es wegzulassen. –

+0

Danke für alles, Sir. – SIM