FeedParser, удаление специальных символов и запись в CSV

Я изучаю Питон. Я поставил перед собой маленькую цель создать парсер RSS. Я пытаюсь собрать автора, ссылку и название. Оттуда я хочу написать в CSV.

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

  1. Как удалить специальные символы, такие как '[' и '''?
  2. Как мне написать автора, ссылку и заголовок в новую строку при создании нового файла?

1 Специальные символы

rssurls = 'http://feeds.feedburner.com/TechCrunch/'

techart = feedparser.parse(rssurls)
# feeds = []

# for url in rssurls:
#     feedparser.parse(url)
# for feed in feeds:
#     for post in feed.entries:
#         print(post.title)

# print(feed.entires)

techdeets = [post.author + " , " + post.title + " , " + post.link  for post in techart.entries]
techdeets = [y.strip() for y in techdeets]
techdeets

Вывод: я получаю нужную информацию, но тег .strip не удаляется.

['Даррелл Этерингтон , Spin запускает первую санкционированную городом систему проката велосипедов без док-станции в районе залива , http://feedproxy.google.com/~r/Techcrunch/~3/BF74UZWBinI/', 'Райан Лоулер , CarDash с финансированием в размере 5,3 млн долларов хочет изменить то, как вы обслуживаете свой автомобиль , http://feedproxy.google.com/~r/Techcrunch/~3/pkamfdPAhhY/', 'Рон Миллер, подключаемый модуль AlienVault ищет украденные пароли в даркнете, http://feedproxy.google.com/~r/Techcrunch/~3/VbmdS0ODoSo/', 'Лукас Мэтни, Firefox для Windows получил встроенную поддержку WebVR, производительность резко возросла в последнем обновлении, http://feedproxy.google.com/~r/Techcrunch/~3/j91jQJm-f2E/',...]

2) Запись в CSV

import csv

savedfile = open('/test1.txt', 'w')
savedfile.write(str(techdeets) + "/n")
savedfile.close()

import pandas as pd
df = pd.read_csv('/test1.txt', encoding='cp1252')
df

Вывод. На выходе был фрейм данных с одной строкой и несколькими столбцами.


person Nick Duddy    schedule 08.08.2017    source источник
comment
Вы можете использовать регулярное выражение, чтобы исключить все, что не находится в [a-zA-Z0-9_], например так: re.sub(r'\w', '', string), где r'\w' — необработанная строка для (сокращения) диапазона символов выше), '' — замена (в данном случае пустая строка) и string — это произвольное имя строки, с которой вы хотите работать.   -  person GH05T    schedule 08.08.2017
comment
techdeets = [post.author + " , " + post.title + " , " + post.link for post in techart.entries] заменить на: techdeets = [','.join([*post]) for post in techart.entries]   -  person GH05T    schedule 08.08.2017
comment
savedfile = open('/test1.txt', 'a') открывает файл в режиме добавления.   -  person GH05T    schedule 08.08.2017


Ответы (1)


Вы почти там :-)

Как насчет использования панд, чтобы сначала создать фрейм данных, а затем сохранить его, что-то вроде этого «продолжая ваш код»:

df = pd.DataFrame(columns=['author', 'title', 'link'])
for i, post in enumerate(techart.entries):
    df.loc[i] = post.author, post.title, post.link

то вы можете сохранить его:

df.to_csv('myfilename.csv', index=False)

OR

вы также можете писать в фрейм данных прямо из записей feedparser:

>>> import feedparser
>>> import pandas as pd
>>>
>>> rssurls = 'http://feeds.feedburner.com/TechCrunch/'
>>> techart = feedparser.parse(rssurls)
>>>
>>> df = pd.DataFrame()
>>>
>>> df['author'] = [post.author for post in techart.entries]
>>> df['title'] = [post.title for post in techart.entries]
>>> df['link'] = [post.link for post in techart.entries]
person Aziz Alto    schedule 08.08.2017
comment
Я использовал первое решение, и оно создало фрейм данных. Не приходило в голову использовать панд таким образом, я даже не думал, что это возможно. Однако есть одна проблема: теперь автор, заголовок и ссылка помещаются в один столбец, но затем этот столбец реплицируется 3 раза. - person Nick Duddy; 09.08.2017
comment
Второй пример сработал. Было бы интересно узнать, как заставить работать цикл for, так как я думаю, что он кажется намного более эффективным? - person Nick Duddy; 09.08.2017
comment
@NickDuddy, это правда, мой плохой! Я только что обновил цикл for, чтобы записи были правильными :) - person Aziz Alto; 10.08.2017
comment
Однако в целом я считаю неэффективным вводить строки по одной. Специально для больших фреймов данных см. комментарий в этой теме stackoverflow.com/q/10715965/2839786 - person Aziz Alto; 10.08.2017
comment
Также я вижу, что pandas удаляет все символы, которые мне не нужны! Это работает спасибо! - person Nick Duddy; 11.08.2017
comment
Приятно знать, что :-) - person Aziz Alto; 11.08.2017