2016-06-09 2 views
0

Ich würde gerne wissen, wie ich meine Ergebnisse aus dem Crawlen in mehrere CSV-Dateien für jede andere Stadt, die ich gecrawlt habe, exportieren. Irgendwie renne ich in die Wände, bekomme keinen richtigen Weg, um es zu klären.Crawling-Ausgabe in mehrere CSV-Dateien

, dass mein Code:

import requests 
from bs4 import BeautifulSoup 
import csv 

user_agent = {'User-agent': 'Chrome/43.0.2357.124'} 
output_file= open("TA.csv", "w", newline='') 
RegionIDArray = [187147,187323,186338] 
dict = {187147: 'Paris', 187323: 'Berlin', 186338: 'London'} 
already_printed = set() 

for reg in RegionIDArray: 
    for page in range(1,700,30): 
     r = requests.get("https://www.tripadvisor.de/Attractions-c47-g" + str(reg) + "-oa" + str(page) + ".html") 
     soup = BeautifulSoup(r.content) 

     g_data = soup.find_all("div", {"class": "element_wrap"}) 

     for item in g_data: 
      header = item.find_all("div", {"class": "property_title"}) 
      item = (header[0].text.strip()) 
      if item not in already_printed: 
       already_printed.add(item) 

       print("POI: " + str(item) + " | " + "Location: " + str(dict[reg])) 

       writer = csv.writer(output_file) 
       csv_fields = ['POI', 'Locaton'] 
       if g_data: 
        writer.writerow([str(item), str(dict[reg])]) 

Mein Ziel wäre, dass ich drei sperate CSV-Dateien für Paris, Berlin und London erhalten stattdessen alle Ergebnisse in einer großen CSV-Datei zu bekommen.

Könnt ihr mir helfen? Vielen Dank für Ihr Feedback :)

+0

Sie könnten in die Gesamtwertung der Content API aussehen wollen statt: https://developer-tripadvisor.com/content-api/ – Riaz

+0

Dank für Ihr Feedback. Ich bin mir dessen sehr bewusst, aber ich würde es gerne selbst crawlen. Irgendwie ist es motivierend, anstatt die API zu verwenden;) –

+0

Wenn Sie in drei verschiedene Dateien basierend auf Inhalt schreiben möchten, müssen Sie drei separate '' 'csv.writer'''s haben, testen Sie den Inhalt und schreiben Sie in die korrekte Datei, abhängig von den Testergebnissen. – wwii

Antwort

1

Ich habe einige kleine Änderungen an Ihrem Code vorgenommen. Um Dateien für jedes Gebietsschema zu erstellen, habe ich den out_file-Namen innerhalb der Schleife verschoben.

Beachten Sie, dass ich jetzt keine Zeit habe, die letzte Zeile ist ein Hack, um Unicode-Fehler zu ignorieren - es überspringt einfach den Versuch, eine Zeile mit einem nicht ASCII-Zeichen auszugeben. Das ist nicht gut. Vielleicht kann jemand diesen Teil reparieren?

import requests 
from bs4 import BeautifulSoup 
import csv 

user_agent = {'User-agent': 'Chrome/43.0.2357.124'} 
RegionIDArray = {187147: 'Paris', 187323: 'Berlin', 186338: 'London'} 
already_printed = set() 

for reg in RegionIDArray: 
    output_file= open("TA" + str(reg) + ".csv", "w") 
    for page in range(1,700,30): 
     r = requests.get("https://www.tripadvisor.de/Attractions-c47-g" + str(reg) + "-oa" + str(page) + ".html") 
     soup = BeautifulSoup(r.content) 

     g_data = soup.find_all("div", {"class": "element_wrap"}) 

     for item in g_data: 
      header = item.find_all("div", {"class": "property_title"}) 
      item = (header[0].text.strip()) 
      if item not in already_printed: 
       already_printed.add(item) 

       # print("POI: " + str(item) + " | " + "Location: " + str(RegionIDArray[reg])) 

       writer = csv.writer(output_file) 
       csv_fields = ['POI', 'Locaton'] 
       if g_data: 
        try: 
         writer.writerow([str(item), str(RegionIDArray[reg])]) 
        except: 
         pass