2016-04-24 4 views
-2

Warum bekomme ich nur die Ergebnisse der letzten URL? Die Idee ist, dass ich eine Liste der Ergebnisse beider URLs bekomme.Schleife im Python-Skript mit Xpath. Warum bekomme ich nur Ergebnisse von der letzten URL?

Auch mit dem Drucken in CSV bekomme ich immer eine leere Zeile. Wie entferne ich diese Zeile?

import csv 
import requests 
from lxml import html 
import urllib 

TV_category = ["_108-tot-127-cm-43-tot-50-,98952,501090","_128-tot-150-cm-51-tot-59-,98952,501091"] 
url_pattern = 'http://www.mediamarkt.be/mcs/productlist/{}.html?langId=-17' 

for item in TV_category: 
    url = url_pattern.format(item) 
    page = requests.get(url) 
    tree = html.fromstring(page.content) 

    outfile = open("./tv_test1.csv", "wb") 
    writer = csv.writer(outfile)  

    rows = tree.xpath('//*[@id="category"]/ul[2]/li') 


for row in rows: 
    price = row.xpath('normalize-space(div/aside[2]/div[1]/div[1]/div/text())') 
    product_ref = row.xpath('normalize-space(div/div/h2/a/text())') 
    writer.writerow([product_ref,price]) 
+0

Warum öffnen Sie die Datei innerhalb der Schleife? – jonrsharpe

+0

** Zeilen ** sollte eine Liste sein, sonst würde es in jeder Schleife ersetzt werden. Eine andere Möglichkeit ist das Verschieben der letzten for-Schleife innerhalb der ersten. –

+0

Wie meinst du Andrés? Kannst du es mir zeigen, ich kann es nicht herausfinden. Danke – Depekker

Antwort

0

Wie ich in der Frage des Kommentar erklärte, müssen Sie innerhalb der zweiten für Schleife setzen (am Ende), um den ersten. Andernfalls werden nur die letzten Zeilen Ergebnisse in der CSV-Datei gespeichert/geschrieben.

Sie müssen die Datei nicht in jeder Schleife öffnen (eine mit Anweisung wird es automatisch schließen). Es ist auch wichtig hervorzuheben, dass beim Öffnen einer Datei mit Schreibflags überschrieben wird, und wenn es sich in einer Schleife befindet, wird es jedes Mal überschrieben, wenn es geöffnet wird.

würde ich Ihren Code Refactoring wie folgt:

import csv 
import requests 
from lxml import html 
import urllib 

TV_category = ["_108-tot-127-cm-43-tot-50-,98952,501090","_128-tot-150-cm-51-tot-59-,98952,501091"] 
url_pattern = 'http://www.mediamarkt.be/mcs/productlist/{}.html?langId=-17' 

with open("./tv_test1.csv", "wb") as outfile: 
    writer = csv.writer(outfile) 

    for item in TV_category: 
     url = url_pattern.format(item) 
     page = requests.get(url) 
     tree = html.fromstring(page.content) 
     rows = tree.xpath('//*[@id="category"]/ul[2]/li') 

     for row in rows: 
      price = row.xpath('normalize-space(div/aside[2]/div[1]/div[1]/div/text())') 
      product_ref = row.xpath('normalize-space(div/div/h2/a/text())') 
      writer.writerow([product_ref,price]) 
Verwandte Themen