Không ghi được tiếng Việt vào file csv

Xin chào các bác. Em đang học Python và em đang crawler data từ web về và lưu nó vào file csv. Khổ nỗi là khi ghi vào file thì lúc mở ra nó bị lỗi font. Em đã khai báo UTF-8 rồi mà vẫn bị ạ.

f = open('job_data.csv', "a+", encoding="utf-8")

Rất mong nhận được sự giúp đỡ. Cám ơn các bác.
Code em như này ạ:

from newspaper import Article
from bs4 import BeautifulSoup
import requests
import csv
import pandas
f = open('job_data.csv', "a+", encoding="utf-8")
f_writer = csv.writer(f, lineterminator='\n')
def get_data(url):

    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.content,"html.parser")

        # get job about
        job_about = soup.find('ul', class_="list-unstyled fs-14 mb-0")

        # get job name
        job_name = job_about.find('h1', class_='fs-20 m-0').text

        # get company name
        company_name = job_about.find('a', class_="color-main fs-16").text.strip()

        #get location -> find all element li -> get li[2]
        all_li_element = job_about.findAll('li')
        location = all_li_element[2].text.replace("Địa điểm tuyển dụng: ","").strip()

        # get salary
        salary = job_about.find('span', class_="color-ed145b").text

        article = Article(url)
        article.download()
        article.parse()


        f_writer.writerow([article.title,article.meta_description,article.url,job_name,company_name,location,salary,article.text])
        print("article.title: ", article.title)
        print("article.meta_description:", article.meta_description)
        print("Link: ", article.url)
        print("Job name: ", job_name)
        print("Company name: ", company_name)
        print("Location: ",location)
        print("Salary: ",salary)
        print("article.text: ",article.text)


    except Exception as ex:
        print("Erro: ", ex)
        pass


if __name__ == '__main__':
    get_data("https://timviec.com.vn/nhan-vien-tu-van-du-hoc-19666.html")

csv không support tiếng Việt bạn nhé, chọn lib khác thôi :smiley:. Pandas thử xem (Cài thêm mấy cái thư viện cần thiết để dùng Pandas với excel, xlrd chẳng hạn).

5 Likes

Chủ topic cần phải rõ ràng về 2 việc:

  1. File không ghi được xuống thành file text có hỗ trợ Unicode với UTF-8 hay là
  2. Ghi được nhưng mở ra thì bị trình đọc file hiểu sai không nhận ra Unicode hiển thị đúng tiếng Việt mà ra giun dế.

Trường hợp không biết nên làm gì thì với ngôn ngữ lập trình không chỉ làm web không thôi mà có cả viết phần mềm cho desktop, server như Python: dùng binary file rồi muốn convert kiểu gì cũng được.

Không phải là CSV không hỗ trợ tiếng Việt, mà là “ai nói với bạn rằng nên mở file CSV bằng Excel”. Cho nên, muốn xem file .CSV có tiếng Việt thì mở bằng trình soạn thảo văn bản thô (hay dùng viết code ấy - và nhớ để nó là encoding utf-8 thay vì ASCII hay Latin 8859 gì đó) hoặc đưa lên Google Sheets.

11 Likes

Mình thấy câu trả lời của Mr Vô Thin là đúng và phù hợp.

Mình chỉ note thêm 1 xíu từ kinh nghiệm của mình, là với mục đích như trong bài viết, bạn hoàn toàn có thể không xài *.csv mà xài text binh thường (*.txt) để lưu/đọc thông tin. Tất nhiên là nó sẽ không tiện bằng csv, nhưng nó cũng không tốn nhiều công sức hơn là mấy, nhưng đổi lại, bạn sẽ có thêm kinh nhiệm xử lý dữ liêu outpout và handle file (đọc/viết).

9 Likes

vãi không hỗ trợ tiếng Việt thật hả bác :frowning:

dạ cái này ạ…

Hi there,

Vì cậu bảo không có ghi ra được file, Cậu có nhận được log lỗi nào không?
Nếu có, cậu thử tìm hiểu lỗi ghi trong log lỗi đó trước, và nếu không tìm được, thì quay lại đây bọn tớ giúp nhé!

Nếu cậu không đưa thêm thông tin, tớ e là cậu phải chờ 1 ai đó tốt bụng, setup và chạy thử code của cậu, và thường cậu sẽ phải chờ lâu đó :sweat_smile:

5 Likes

Thử utf-16 đi. Có thể được

6 Likes

hay quá ạ, utf-16 được các bạn nhé

Không có gì khó cả. hãy thử
dataframe.to_csv(’<Tên file>.csv’, index=False, encoding=‘utf-8-sig’)

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?