Скребок только выводит данные с последнего URL в CSV - PullRequest
0 голосов
/ 25 мая 2019

Я очень плохо знаком с Python и пытаюсь учиться, выполняя небольшие небольшие проекты. В настоящее время я пытаюсь собрать некоторую информацию с различных веб-страниц, однако всякий раз, когда он выводит извлеченные данные в CSV, кажется, что он выводит данные только с последнего URL.

В идеале, я хочу, чтобы он мог писать в CSV вместо добавления, так как я просто хочу CSV только с самыми последними данными из самых последних записей.

Я просматривал некоторые другие запросы, подобные этим, в StackOverflow, но я либо не понимаю их, либо они просто не работают для меня. (Вероятно, первый).

Любая помощь будет принята с благодарностью.

import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd

URL = ['URL1','URL2']

for URL in URL:
    response = requests.get(URL)
    soup = BeautifulSoup(response.content, 'html.parser')

    nameElement = soup.find('p', attrs={'class':'name'}).a
    nameText = nameElement.text.strip()

    priceElement = soup.find('span', attrs={'class':'price'})
    priceText = priceElement.text.strip()



columns = [['Name','Price'], [nameText, priceText]]


with open('index.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(columns)

1 Ответ

1 голос
/ 25 мая 2019

Вы должны открыть файл перед циклом for и записать каждую строку внутри for loop

URL = ['URL1','URL2']

with open('index.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)

    writer.writerow( ['Name','Price'] )

    for URL in URL:
        response = requests.get(URL)
        soup = BeautifulSoup(response.content, 'html.parser')

        nameElement = soup.find('p', attrs={'class':'name'}).a
        nameText = nameElement.text.strip()

        priceElement = soup.find('span', attrs={'class':'price'})
        priceText = priceElement.text.strip()

        writer.writerow( [nameText, priceText] )

Или вы должны создать список до for цикла и append() данных в этот список

URL = ['URL1','URL2']

columns = [ ['Name','Price'] ]

for URL in URL:
    response = requests.get(URL)
    soup = BeautifulSoup(response.content, 'html.parser')

    nameElement = soup.find('p', attrs={'class':'name'}).a
    nameText = nameElement.text.strip()

    priceElement = soup.find('span', attrs={'class':'price'})
    priceText = priceElement.text.strip()

    columns.append( [nameText, priceText] )

with open('index.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(columns)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...