Ich habe diesen Code unten, der ein Bild in meinem lokalen Verzeichnis von einer Suchmaschine speichern soll. Es tut, aber es speichert es als Hex-Datei. Ich kann mich mit dem Code herumschlagen und Glück haben, aber ich hoffe, dass jemand hier mir die beste Lösung geben kann.Python-Skript zum Analysieren des ersten Bildes der Suchmaschine aus der Liste der Schlüsselwörter in CSV
Wenn ich die Hex-Datei in Notepad ++ öffne, bemerke ich die erste Zeile der Hex-Datei sagt "‰ PNG". Ich habe die Dateierweiterung manuell geändert und das korrekte Bild wird angezeigt.
Das ist meine erste Ausgabe mit diesem Code. Ich versuche nur, es besser zu verstehen.
Ich wollte auch eine Liste von Schlüsselwörtern werfen zu parsen und zurückgeben, welche Anzahl von Bildern, Standard ist 1 nach dem Skript. Ist es möglich, python zu sagen, dass es eine Spalte mit Suchabfragen durchlesen und die Bilddateien als Suchabfrage speichern soll? Wenn es einfacher ist, verwende ich mysql workbench, um an meiner Datenbank zu arbeiten. Ich habe eine Spalte, in der ich dieses Skript ausführen möchte, aber möglicherweise den Dateinamen zurückgeben, während es in einem lokalen Verzeichnis gespeichert wird.
Zum Beispiel meine erste Suche war für "HP C9730A", die ein Drucker Toner Produkt ist. Wie kann ich eine Liste von Teilenummern senden, kann es ein CSV- oder JSON-Array sein und die analysierten Bilder genauso wie die verwendeten Schlüsselwörter zurückgeben? So bemerkte Dateiname wäre „HP C9730A.jpg“
ich die Klausel im Skript heißt es:
<b>else</b> 'jpg'
Das erste Bild auf Google mein Beispiel mit wie bereits erwähnt ist eine PNG-Datei. Ist das der Grund, warum meine Datei nicht gespeichert wird?
Wie auch immer, können Sie helfen? Ich nicht nur JPG-oder PNG-Bilder zu speichern, sondern speichern Sie sie auch als Suchbegriffe mit möglichen Batch-Verarbeitung mit CSV oder JSON-Array mit vielen verschiedenen Keywords.
import argparse
import json
import itertools
import logging
import re
import os
import uuid
import sys
from urllib2 import urlopen, Request
from bs4 import BeautifulSoup
def configure_logging():
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
handler.setFormatter(
logging.Formatter('[%(asctime)s %(levelname)s %(module)s]: %(message)s'))
logger.addHandler(handler)
return logger
logger = configure_logging()
REQUEST_HEADER = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36"}
def get_soup(url, header):
response = urlopen(Request(url, headers=header))
return BeautifulSoup(response, 'html.parser')
def get_query_url(query):
return "https://www.google.co.in/search?q=%s&source=lnms&tbm=isch" % query
def extract_images_from_soup(soup):
image_elements = soup.find_all("div", {"class": "rg_meta"})
metadata_dicts = (json.loads(e.text) for e in image_elements)
link_type_records = ((d["ou"], d["ity"]) for d in metadata_dicts)
return link_type_records
def extract_images(query, num_images):
url = get_query_url(query)
logger.info("Souping")
soup = get_soup(url, REQUEST_HEADER)
logger.info("Extracting image urls")
link_type_records = extract_images_from_soup(soup)
return itertools.islice(link_type_records, num_images)
def get_raw_image(url):
req = Request(url, headers=REQUEST_HEADER)
resp = urlopen(req)
return resp.read()
def save_image(raw_image, image_type, save_directory):
extension = image_type if image_type else 'jpg'
file_name = uuid.uuid4().hex
save_path = os.path.join(save_directory, file_name)
with open(save_path, 'wb') as image_file:
image_file.write(raw_image)
def download_images_to_dir(images, save_directory, num_images):
for i, (url, image_type) in enumerate(images):
try:
logger.info("Making request (%d/%d): %s", i, num_images, url)
raw_image = get_raw_image(url)
save_image(raw_image, image_type, save_directory)
except Exception as e:
logger.exception(e)
def run(query, save_directory, num_images=100):
query = '+'.join(query.split())
logger.info("Extracting image links")
images = extract_images(query, num_images)
logger.info("Downloading images")
download_images_to_dir(images, save_directory, num_images)
logger.info("Finished")
def main():
parser = argparse.ArgumentParser(description='Scrape Google images')
parser.add_argument('-s', '--search', default='bananas', type=str, help='search term')
parser.add_argument('-n', '--num_images', default=1, type=int, help='num images to save')
parser.add_argument('-d', '--directory', default='/Users/Images/', type=str, help='save directory')
args = parser.parse_args()
run(args.search, args.directory, args.num_images)
if __name__ == '__main__':
main()