#python #csv
#python #csv
Вопрос:
Я написал простой код, который очищает данные с веб-сайта, но я изо всех сил пытаюсь сохранить все строки в файл csv. Готовый скрипт сохраняет только одну строку — это последнее событие в цикле.
def get_single_item_data(item_url):
f= csv.writer(open("scrpe.csv", "wb"))
f.writerow(["Title", "Company", "Price_netto"])
source_code = requests.get(item_url)
soup = BeautifulSoup(source_code.content, "html.parser")
for item_name in soup.find_all('div', attrs={"id" :'main-container'}):
title = item_name.find('h1').text
prodDesc_class = item_name.find('div', class_='productDesc')
company = prodDesc_class.find('p').text
company = company.strip()
price_netto = item_name.find('div', class_="netto").text
price_netto = price_netto.strip()
#print title, company, ,price_netto
f.writerow([title.encode("utf-8"), company, price_netto, ])
Важно сохранять данные в параллельных столбцах
Комментарии:
1. Исправьте свой отступ, но я предполагаю, что есть только один div с идентификатором
main-container
, поэтому вы пишете именно то, что ожидаете, один элемент. Что такое URL?2. можете ли вы опубликовать пример вывода? Мне интересно, есть ли там просто не с новой строкой, как вы ожидаете.
3. @Will, writerow добавит новую строку, так что это определенно не так.
4. Кроме того, почему вы открываете файл в двоичном режиме?
5. просто ловлю, потому что файл открыт wb
Ответ №1:
@PadraicCunningham Это весь мой сценарий:
import requests
from bs4 import BeautifulSoup
import csv
url_klocki = "http://selgros24.pl/Dla-dzieci/Zabawki/Klocki-pc1121.html"
r = requests.get(url_klocki)
soup = BeautifulSoup(r.content, "html.parser")
def main_spider(max_page):
page = 1
while page <= max_page:
url = "http://selgros24.pl/Dla-dzieci/Zabawki/Klocki-pc1121.html"
source_code = requests.get(url)
soup = BeautifulSoup(source_code.content, "html.parser")
for link in soup.find_all('article', class_='small-product'):
url = "http://www.selgros24.pl"
a = link.findAll('a')[0].get('href')
href = url a
#print href
get_single_item_data(href)
page =1
def get_single_item_data(item_url):
f= csv.writer(open("scrpe.csv", "wb"))
f.writerow(["Title", "Comapny", "Price_netto"])
source_code = requests.get(item_url)
soup = BeautifulSoup(source_code.content, "html.parser")
for item_name in soup.find_all('div', attrs={"id" :'main-container'}):
title = item_name.find('h1').text
prodDesc_class = item_name.find('div', class_='productDesc')
company = prodDesc_class.find('p').text
company = company.strip()
price_netto = item_name.find('div', class_="netto").text
price_netto = price_netto.strip()
print title, company, price_netto
f.writerow([title.encode("utf-8"), company, price_netto])
main_spider(1)
Ответ №2:
Проблема в том, что вы открываете выходной файл get_single_item_data
, и он закрывается, когда эта функция возвращается и f
выходит из области видимости. Вы хотите передать открытый файл, get_single_item_data
чтобы было записано несколько строк.