#python #python-3.x #csv #jupyter-notebook #character-encoding
#python #python-3.x #csv #jupyter-записная книжка #кодировка символов
Вопрос:
См. Файл Excel SS Данные выглядят как на изображении в csv-файле
- Это то, что я написал до сих пор, чтобы проанализировать обзоры из IMDB. Сначала он извлекает обзоры с веб-сайта imdb (250 лучших фильмов).
- Затем извлекает ссылки на фильмы, просматривает ссылки, извлекает текст из обзоров и сохраняет его в формате данных словаря с movie_name: формат обзора фильма.
- На последнем шаге я могу распечатать Movie_Name: обзор фильма на консоли. Но когда я записываю в CSV-файл, он выдает либо ошибки, либо записывает просто неправильные данные в CSV-файл.
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
import csv
import requests
import re
import nltk
from nltk.corpus import stopwords
nltk.download('stopwords')
nltk.download('punkt')
from nltk.tokenize import word_tokenize
# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}
url = input('Enter - ')
while (True):
try:
page = requests.get(url, headers = headers)
soup = BeautifulSoup(page.content, "html.parser")
container = soup.find_all('td', class_ = 'titleColumn')
break
except:
print("Please enter a valid url:")
url = input('Enter - ')
def movies_list():
movie_names = []
movies = container[:100] #here we get the top 50 movies we want
for movie in movies:
name = movie.find('a').text
movie_names.append(name)
return movie_names
#print(movie_names)
def movie_links_list():
movie_links = []
movies = container[:100]
for movie in movies:
tag = movie.find('a')`enter code here`
link = tag.get('href', None)
movie_links.append(link)
for i in range(len(movie_links)):
movie_links[i] = 'https://www.imdb.com/' movie_links[i]
return movie_links
def review_link_list(movie_links):
review_links = []
for movie_link in movie_links:
title_pos = movie_link.find('title')
nxt_slash = movie_link.find('/', title_pos)
nxt2_slash = movie_link.find('/', nxt_slash 1)
review_link = movie_link[:title_pos-1] movie_link[title_pos:nxt2_slash 1] "reviews?ref_=tt_urv"
review_links.append(review_link)
return review_links
def get_reviews(review_links):
movie_names=movies_list()
review_dict={}
for i in range(len(review_links)):
movie_name=movie_names[i]
movie_reviews=[]
review_page = requests.get(review_links[i], headers = headers)
soup = BeautifulSoup(review_page.content, "html.parser")
tag = soup.find_all('div', class_ = 'content') #find_all to return a list
top_50= tag[:50]
for j in top_50:
try:
review=j.select('div.show-more__control')[0].text
except:
continue
movie_reviews.append(review)
review_dict[movie_name]=movie_reviews
return review_dict
file= "abc.csv"
with open(file ,'w') as csvfile:
for i in range(len(movies)):
csvwriter = csv.writer(csvfile)
Name=movies[i]
Review = reviews_dict[Name]
try:
csvwriter.writerow(Review)
except:
csvwriter.writerow("Review does not exist")
Комментарии:
1. Какую ошибку вы получили? На данный момент попробуйте отредактировать эту часть
csv.writer(csvfile)
csv.writer(csvfile,delimiter=',')
и посмотреть, сработает ли это.2. В этом acse он выдает ошибку типа: ‘delimeter’ является недопустимым аргументом ключевого слова для этой функции
Ответ №1:
вам нужно открыть файл и записать список с данными
import csv
dict = {"mykey":10}
with open("mydata.csv", 'a') as file:
writer = csv.writer(file)
for key, value in dict.items():
data = [key, value]
writer.writerow(data)
в csv-файле «mydata.csv» вы не получите
mykey,10
При использовании ‘a’ в качестве аргументов в open вы можете добавлять данные в файл, чтобы не перезаписывать старые данные
Комментарии:
1. Этот метод работает с несколькими входами. Но в моих данных len(dict) равно 100, dict.key = movie_name, а значение dict — это список из 25 отзывов об этом фильме. итак, всего 100 списков, содержащих около 1 миллиона слов. Запись этих данных приводит к потере данных и ненужным переводам строк