Как я могу создать файл Python CSV после очистки информации с веб-страницы?

#python #facebook #csv

#python #Facebook #csv

Вопрос:

Я пишу код (да, я новичок в этом) для извлечения информации со страницы на facebook. Я использую facebook-scraper для получения информации. Мне нужно создать CSV-файл для хранения этой информации, но я всегда выхожу пустым.

Исходный код

 from facebook_scraper import get_posts
for post in get_posts('bibliotecaunespbauru', pages=66):
    print(post['time']) # não funciona
    print(post['post_id'])
    print(post['text'])
    print(post['image'])
    print(post['video'])
    print(post['likes'])
    print(post['comments'])
    print(post['shares'])
    print(post['link'])
  

Код для сохранения в CSV-файле.

 import csv
from facebook_scraper import get_posts
for post in get_posts('bibliotecaunespbauru', pages=10):
    data = [print(post['post_id']), print(post['text']), print(post['image'])]
with open("facebook.csv", "w", newline="") as f:
   writer = csv.writer(f)
   writer.writerow(data)
with open('facebook.csv', newline='') as csvfile:
    data = csv.reader(csvfile, delimiter=' ')
    for row in data:
        print(', '.join(row))
  

Привет, большое спасибо за это. теперь это имеет такой смысл. Однако он по-прежнему не работает, поскольку теперь он извлекает только один запрос вместо 10 страниц.

 import csv
from facebook_scraper import get_posts
for post in get_posts('bibliotecaunespbauru', pages=10):
     data = [post['post_id'], post['text'], post['image']]
with open("facebook.csv", "a", newline="") as f:
   writer = csv.writer(f)
   writer.writerow(data)
with open('facebook.csv', newline='') as csvfile:
    data = csv.reader(csvfile, delimiter=' ')
    for row in data:
        print(', '.join(row))

  

Третья попытка. Все еще получаю только одно сообщение.

 
import csv
from facebook_scraper import get_posts
for post in get_posts('bibliotecaunespbauru', pages=10):
     data = [post['post_id'], post['text'], post['image']]
with open("facebook.csv", "a", newline="") as f:
   writer = csv.writer(f)
   writer.writerow(data)
with open('facebook.csv', newline='') as csvfile:
    data = csv.reader(csvfile, delimiter=' ')
    for row in data:
        print(', '.join(row))

  

Четвертая попытка.

 import csv
from facebook_scraper import get_posts
for post in get_posts('bibliotecaunespbauru', pages=10):
    data = [post['post_id'], post['text'], post['image']]
    with open("facebook.csv", "a", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(data)
  

ВОЗВРАТ

 UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-46-b4f7f9df1e02> in <module>
      5     with open("facebook.csv", "a", newline="") as f:
      6         writer = csv.writer(f)
----> 7         writer.writerow(data)

~AppDataLocalProgramsPythonPython39libencodingscp1252.py in encode(self, input, final)
     17 class IncrementalEncoder(codecs.IncrementalEncoder):
     18     def encode(self, input, final=False):
---> 19         return codecs.charmap_encode(input,self.errors,encoding_table)[0]
     20 
     21 class IncrementalDecoder(codecs.IncrementalDecoder):

UnicodeEncodeError: 'charmap' codec can't encode characters in position 76-77: character maps to <undefined>
  

Комментарии:

1. хорошо, это другая ошибка, также можете ли вы повторно выполнить все изменения, которые вы сделали здесь? это делается для того, чтобы убедиться, что вопросы остаются верными своему замыслу, будущие читатели могут прочитать комментарии, чтобы понять, через что вам пришлось пройти

2. Я не получаю эту ошибку, ('bibliotecaunespbauru', pages=10) это все то же самое?

3. хорошо, я запустил ('bibliotecaunespbauru', pages=66) и не получаю эту ошибку, вы уверены, что используете приведенный ниже код? Я должен иметь возможность получить сообщение об ошибке, которое вы получаете

4. Да! Я изменил его до 10 только для тестирования. Да, тот же код. Позвольте мне попробовать еще раз.

5. использование open("facebook.csv", "a", newline="",encoding="utf-8")

Ответ №1:

У вас есть две проблемы с вашим кодом.

Первая проблема заключается в том, как вы создаете data

Неправильно

[print(post['post_id']), print(post['text']), print(post['image'])]

Почему

В этой строке, которую вы печатаете по мере получения значений, return значение печати отображается None и, следовательно None , сохраняется в списке.

Старый вывод data на каждой итерации: [None, None, None]

Исправление:

[post['post_id'], post['text'], post['image']] .

Вывод нового data : ['2092819824183367', 'Biblioteca da Unesp em Bauru ganha nova identidade visual ❤️nnhttps://youtu.be/dTCGp1eGmtMnnYOUTUBE.COMnBiblioteca da Unesp em Bauru ganha nova identidade visual', None]

(PS: idk, что это означает)

Вторая проблема заключается в том, как вы записываете в файл.

 open("facebook.csv", "w", newline="")
  

Обратите a внимание на open("facebook.csv", "a", newline="") ввод при записи в файл, это используется для открытия файла для открытия файла в режиме «добавить», открытие его в w режиме (ваш старый код) перезапишет файл в каждом цикле, вызывая новый пустой файл в каждом цикле, и такое поведение не то, что вам нужно.

Таким образом, интегрируя все изменения и отступы, это полный код для того, что вы ожидаете

 import csv
from facebook_scraper import get_posts
for post in get_posts('bibliotecaunespbauru', pages=10):
    data = [post['post_id'], post['text'], post['image']]
    with open("facebook.csv", "a", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(data)
  

Что касается ошибок Unicode

вы можете использовать open("facebook.csv", "a", newline="",encoding="utf-8") при открытии файла

Комментарии:

1. Спасибо! Теперь это усугубляет еще одну проблему. Он извлекает только одно сообщение с 10 страниц.

2. вы пробовали код отсюда? в вашем коде были некоторые проблемы с отступами, и я предполагаю, что одно сохраненное сообщение является последним сообщением?

3. да! Я сделал =) Спасибо за помощь. Теперь я пытаюсь решить другую проблему. Извлекается только одна страница