Data Mining: Instagram Scraper-Location-Tag mit yelp_data_set (2)

Ich habe letztes Mal über die grundlegende Installation von Instagram Scraper gesprochen (https://medium.com/@bruceoh/data-mining-instagram-scraper-1-d557e7ae426), mich aber nicht mit weiteren Funktionen befasst, da sich meine Data Mining-Arbeit konzentriert auf dem Standort-Tag. Ich hatte Interesse an dem Location-Tag auf Instagram. Ich habe mich gefragt, warum Instagram dem Standort-Tag den Link zur Verfügung stellt, über den Sie sehen können, dass andere Fotos dasselbe Standort-Tag und die Standort-Tags haben, und warum Personen Standort-Tags auf ihre Fotos setzen. Um einige Gründe herauszufinden, habe ich mich entschlossen, die Daten nach Standort-Tag abzurufen.

Hier ist ein Beispiel dafür:

Umami Burger in 1200 Franklin St, Oakland

Wenn Sie wie oben gezeigt auf den Tag Umami Burger mit 1200 Franklin St klicken, werden alle Fotos angezeigt, die an diesem Ort markiert sind. Das Problem ist jedoch, dass Umami Burger mehrere Standorte hat. Wenn Sie also an einem bestimmten Ort nach Umamu Burger suchen, müssen Sie jedes Mal nachsehen.

Um dies zu beheben und einen genauen Ort zu finden, den Sie suchen, möchte ich die Adressnummer hinzufügen. Wenn Sie versuchen, den Umami Burger in 338 S Anaheim Blvd zu bekommen, geben Sie besser 'Umami Burger 338' ein. Dann erhalten Sie einen (falls vorhanden) oder nichts. Dies ist jedoch nicht der perfekte Weg, es besteht immer noch die Möglichkeit, dass Sie die Ergebnisse erzielen, die Sie nicht möchten.

Da der Algorithmus für die Suche auf der Website dem Instagram-Scraper entsprechen sollte, würde er auch funktionieren.

instagram-scraper --suchort Umami Burger 338
Standort-ID: 19002234, Titel: Umami Burger, Untertitel: 338 S Anaheim Blvd, Anaheim, Kalifornien, Stadt: Anaheim, Kalifornien, lat: 33.8324803, lng: -117.9126456

Um auf meine ursprünglichen Interessen zurückzukommen, wollte ich die Fotos nach Standort-Tags anzeigen. Ich dachte darüber nach, wie ich Restaurants auswählen kann, um die Standort-Tags zu erhalten. Eine Möglichkeit, die ich gewählt habe, ist die Verwendung von Yelp. Yelp bietet Benutzern eine API zum Abrufen der Daten (Yelp-API: https://www.yelp.com/developers/documentation/v2/overview). Also habe ich die Listen der am meisten bewerteten Restaurants in fünf verschiedenen Städten durchsucht: San Francisco, Downtown LA, Santa Monica, Downtown Chicago und New York.

Dies sind 50 Restaurants in San Francisco, sortiert nach most_reviewed /

{"Unternehmen": [{"ID": "Schwein-Insel-Auster-Co-San-Francisco", "Name": "Hog Island Oyster Co", "image_url": "https: //s3-media1.fl .yelpcdn.com / bphoto / uXxVZfHdCF_qUlCvsxioJg / o.jpg "," is_closed ": false," url ":" https://www.yelp.com/biz/hog-island-oyster-co-san-francisco?adjust_creative = zmN7jS71wcuL-rWSareUQA & utm_campaign = yelp_api_v3 & utm_medium = api_v3_business_search & utm_source = zmN7jS71wcuL-rWSareUQA "," review_count ": 4261," food ":" "," title ":" Seafood Markets "}, {" alias ":" raw_food "," title ":" Live / Raw Food "}]," Bewertung ": 4,5," Koordinaten ": {" Breitengrad ": 37,7960118266409 , "longitude": -122.393553256988}, "transaction": [], "price": "$$", "location": {"address1": "1 Ferry Bldg", "address2": "", "address3" : "Shop 11", "Stadt": "San Francisco", "Postleitzahl": "94111", "Land": "USA", "Bundesstaat": "CA", "Anzeigeadresse": ["1 Ferry Bldg", "Shop 11", "San Francisco, CA 94111"]}, "phone": "+14153917117", "display_ Telefon ":" (415) 391-7117 "," Entfernung ": 1161.4943614862}

Die Yelp-API stellt die Daten als .json-Datei bereit, Sie können sie jedoch problemlos in .csv umwandeln. Einer der Gründe, warum ich die Konvertierung in .csv vorschlage, ist, dass es einfach ist, sie einmal anzusehen und besser für das Skript zu codieren.

.json zu .csv
Öffnen Sie die CSV-Datei mit MS Excel

Sie erhalten die meisten Informationen zu einem Restaurant, das Sie auf Instagram Scraper finden müssen. Auf dieser Grundlage habe ich ein Skript erstellt

load.py

Import CSV Import Subprozess Importzeit
mit open ('most_reviewed_data.csv') als csvfile: readCSV = csv.reader (csvfile, delimiter = ',') für Zeile in readCSV: name = row [1] address = row [12] name = name.replace (" '"," ") name = name.replace (" & "," ") name_addr = name +" "+ address.split () [0]
p = subprocess.Popen (["instagram-scraper", "--search-location", name_addr], stdout = subprocess.PIPE) Ausgabe, err = p.communicate () # time.sleep (2) für Zeile in der Ausgabe .splitlines (): Zeile drucken aps = line.find (",") location_id = line [13: aps] p = subprocess.Popen (["instagram-scraper", "- t image", "- media_metadata", "-m 500", "- include-location", "--location", location_id], stdout = subprocess.PIPE) time.sleep (45)

Sie können dieses Skript einfach ausführen: Die Datei python load.py> results.txt results.txt enthält die Liste der Restaurants, die instagram-scraper gefunden hat. Wie beim letzten Mal ist es wichtig, dass Sie Zeit schlafen. Möglicherweise möchten Sie zwischen jeder Abfrage genügend Schlaf geben, um nicht von Instagram blockiert zu werden. Für das Argument in Instagram-Scraper "-t Bild" gibt es nur Bilder, da Leute Videos oder andere posten können, kann ich den Datentyp nur auf Bilder beschränken.

Damals habe ich nach Breiten- und Längengraden gesucht. Dies sind alte Skripte, die ich verwendet habe, aber mit dem obigen Skript hatte ich bessere Ergebnisse

Import CSV Import Subprozess Importzeit
mit open ('data_1_2000.csv') als csvfile: readCSV = csv.reader (csvfile, delimiter = ',') für Zeile in readCSV: address = row [1] name = row [2] subname = name [0: 3 ] ori_lat = row [3] ori_lng = row [4]
time.sleep (3)
p = subprocess.Popen (["instagram-scraper", "--search-location", address], stdout = subprocess.PIPE) Ausgabe, err = p.communicate ()
if output == "": time.sleep (3) p = subprocess.Popen (["instagram-scraper", "--search-location", name], stdout = subprocess.PIPE)
Ausgabe, err = p.communicate () für Zeile in output.splitlines (): lat = line.find ("lat") lng = line.find ("lng") aps = line.find (",") location_id = Zeile [13: aps] wenn ori_lat [0: 2] == Zeile [lat + 5: lat + 7] und ori_lng [0: 4] == Zeile [lng + 5: lng + 9]: #with open (" test.txt "," w ") als text_file: # text_file.writelines (Zeile +" "+ Name +" "+ Adresse +" "+ ori_lat +" "+ ori_lng) Druckzeile +" "+ Name +" "+ Adresse + "" + ori_lat + "" + ori_lng time.sleep (3) p = subprocess.Popen (["instagram-scraper", "- t image", "- media_metadata", "-m 100", "- -location ", location_id], stdout = subprocess.PIPE) else: #pass für Zeile in output.splitlines (): lat = line.find (" lat ") lng = line.find (" lng ") aps = line. find (",") location_id = line [13: aps]
if ori_lat [0: 2] == Zeile [lat + 5: lat + 7] und ori_lng [0: 4] == Zeile [lng + 5: lng + 9]: if line.find (Subname)! = -1 : #p = subprocess.Popen (["instagram-scraper", "-m 50", "--location", location_id], stdout = subprocess.PIPE) #output, err = p.communicate () print line + " "+ name +" "+ address +" "+ ori_lat +" "+ ori_lng time.sleep (3) p = subprocess.Popen ([" instagram-scraper "," -t image "," - media_metadata "," -m 100 "," --location ", location_id], stdout = subprocess.PIPE) #with open (" test.txt "," w ") als text_file: # text_file.writelines (Zeile +" "+ name +" "+ Adresse +" "+ ori_lat +" "+ ori_lng)

Mit dem Skript und der Yelp-API konnte ich die Daten mit den meisten bewerteten Restaurants abrufen. Da die Yelp-API nur maximal 50 zulässt, können Sie Ihre Forschung von diesem Punkt aus definitiv erweitern.

Dies sind die Ergebnisse des Skripts

results.txt aus dem Skript generiert (load.py)

Ich wollte dies teilen, weil ich so viel Zeit damit verbracht habe, die Daten nach Standort-Tags abzurufen. Von der Entscheidung, auf welche Restaurants ich ziele, bis zum eigentlichen Data Mining. Ich hoffe, dass es jedem hilft, der am Data Mining arbeitet!

Das nächste Mal ist es ähnlich, aber ich werde mit Instagram Scraper über die Yelp Dataset Challenge schreiben, es wird eine Erweiterung davon sein!

Viel Spaß mit Instagram Scraper!