Экспорт результатов Python Scraping в CSV - PullRequest
0 голосов
/ 07 февраля 2019

Приведенный ниже код дает значение для идентификатора "resultStats", который я хотел бы сохранить в файле CSV.Есть ли какой-нибудь разумный способ иметь значения «требуемые_угловые_запросы» (т. Е. Условия поиска) в столбце А и значения «resultStats» в столбце В CSV?

Я видел, что на этом есть несколько потоковтема, но ни одно из решений, которые я прочитал, не сработало для конкретной ситуации.

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)

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Я взял на себя смелость переписать это, чтобы использовать библиотеку Requests вместо urllib, но это показывает, как писать CSV, что, как мне кажется, вас больше заинтересовало:

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 голосов
/ 07 февраля 2019

вместо того, чтобы записывать его построчно, вы можете записать все это за один раз, предварительно сохранив результат в кадре данных pandas.Смотрите ниже код

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 голосов
/ 07 февраля 2019

К сожалению, оригинальный ответ был удален - пожалуйста, найдите код ниже для всех, кто интересуется ситуацией.Спасибо пользователю, который первым разместил решение:

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])
...