1
votes

Exportation des résultats de récupération Python au format CSV

Le code ci-dessous donne une valeur pour l'ID "resultStats", que je voudrais enregistrer dans un fichier CSV. Existe-t-il un moyen intelligent d'avoir les "desire_google_queries" (c'est-à-dire les termes de recherche) dans la colonne A et les valeurs "resultStats" dans la colonne B du CSV?

J'ai vu qu'il y avait un certain nombre de fils sur ce sujet mais aucun des solutions que j'ai lues ont fonctionné pour la situation spécifique.

from bs4 import BeautifulSoup
import urllib.request
import csv

    desired_google_queries = ['Elon Musk' , 'Tesla', 'Microsoft']

for query in desired_google_queries:

    url = 'http://google.com/search?q=' + query

    req = urllib.request.Request(url, headers={'User-Agent' : "Magic Browser"})
    response = urllib.request.urlopen( req )
    html = response.read()

    soup = BeautifulSoup(html, 'html.parser')

    resultStats = soup.find(id="resultStats").string
    print(resultStats)


0 commentaires

3 Réponses :


0
votes

La réponse d'origine a malheureusement été supprimée - veuillez trouver ci-dessous le code pour toutes les autres personnes intéressées par la situation. Merci à l'utilisateur qui a publié la solution en premier lieu:

with open('eggs.csv', 'w', newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['query', 'resultStats'])
    for query in desired_google_queries:
        ...
        spamwriter.writerow([query, resultStats])


0 commentaires

2
votes

J'ai pris la liberté de réécrire ceci pour utiliser la bibliothèque Requests au lieu de urllib, mais ceci montre comment écrire en CSV, ce qui vous intéressait le plus:

from bs4 import BeautifulSoup
import requests
import csv

desired_google_queries = ['Elon Musk' , 'Tesla', 'Microsoft']
result_stats = dict()

for query in desired_google_queries:
    url = 'http://google.com/search?q=' + query
    response = requests.get(url)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    result_stats[query] = soup.find(id="resultStats").string

with open ('searchstats.csv', 'w', newline='') as fout:
    cw = csv.writer(fout)
    for q in desired_google_queries:
        cw.writerow([q, result_stats[q]])


0 commentaires

1
votes

au lieu de l'écrire ligne par ligne, vous pouvez tout écrire en une seule fois en stockant d'abord le résultat dans un dataframe pandas. Voir ci-dessous le code

from bs4 import BeautifulSoup
import urllib.request
import pandas as pd

data_dict = {'desired_google_queries': [],
             'resultStats': []}

desired_google_queries = ['Elon Musk' , 'Tesla', 'Microsoft']

for query in desired_google_queries:

    url = 'http://google.com/search?q=' + query

    req = urllib.request.Request(url, headers={'User-Agent' : "Magic Browser"})
    response = urllib.request.urlopen( req )
    html = response.read()

    soup = BeautifulSoup(html, 'html.parser')

    resultStats = soup.find(id="resultStats").string

    data_dict['desired_google_queries'].append(query)
    data_dict['resultStats'].append(resultStats)

df = pd.DataFrame(data=data_dict)
df.to_csv(path_or_buf='path/where/you/want/to/save/thisfile.csv', index=None)


0 commentaires