python爬取数据写入csv后日期列显示为####
时间: 2023-09-17 16:11:03 浏览: 82
这个问题通常是因为Excel默认情况下将日期列的宽度设置得比较小,导致日期显示不全,从而显示成了“####”。解决方法是在打开CSV文件时,手动调整日期列的宽度,或者在写入CSV文件时,设置日期列的宽度为一个较大的值(比如20)。具体的代码如下:
```python
import csv
with open('data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
# 设置日期列宽度为20
writer.writerow(['日期'.ljust(20), '数据'])
writer.writerow(['2022-01-01', 1])
```
当然,你也可以使用Pandas库来写入CSV文件,Pandas会自动调整列宽,避免出现这个问题。代码如下:
```python
import pandas as pd
data = {'日期': ['2022-01-01'], '数据': [1]}
df = pd.DataFrame(data)
df.to_csv('data.csv', index=False, encoding='utf-8-sig')
```
相关问题
python如何将爬取的数据写入csv
要将爬取的数据写入CSV文件,可以使用Python内置的csv模块。以下是一个示例代码:
```python
import csv
# 假设你已经有一个列表叫做data,里面包含了你要写入CSV文件的数据
data = [
['John', 'Doe', 25],
['Jane', 'Doe', 30],
['Bob', 'Smith', 40]
]
# 打开文件,使用csv模块写入数据
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data)
print('数据已写入CSV文件!')
```
在这个示例中,我们使用了内置的csv.writer()函数来创建一个写入器对象。然后,我们使用writerows()方法将数据写入CSV文件。最后,我们通过print()函数输出一条消息,确认数据已经被成功写入CSV文件。
注意,在打开CSV文件时,我们将newline参数设置为'',这是为了避免Windows操作系统下可能出现的一些换行符问题。如果你在Linux或Mac上运行代码,则不需要这个参数。
python多线程爬取数据,并写入csv
可以使用Python的多线程模块`threading`来实现多线程爬取数据,并使用`csv`模块将数据写入CSV文件。
以下是一个示例代码,用于爬取豆瓣电影Top250的电影名称、评分和链接,并将数据写入CSV文件中。
```python
import requests
import csv
import threading
from bs4 import BeautifulSoup
def get_movie_info(start):
url = f'https://movie.douban.com/top250?start={start}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
movie_list = soup.find(class_='grid_view').find_all('li')
for movie in movie_list:
title = movie.find(class_='title').text
rating = movie.find(class_='rating_num').text
link = movie.find('a')['href']
movie_info = [title, rating, link]
write_to_csv(movie_info)
def write_to_csv(movie_info):
with open('douban_top250.csv', 'a', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(movie_info)
if __name__ == '__main__':
threads = []
for i in range(0, 250, 25):
t = threading.Thread(target=get_movie_info, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
```
在上面的代码中,我们首先定义了一个`get_movie_info`函数用于爬取每一页的电影信息。在函数中,我们使用`requests`模块发送HTTP请求,获取网页的HTML源代码,并使用`BeautifulSoup`模块解析HTML文档,获取电影名称、评分和链接信息。
然后,我们定义了一个`write_to_csv`函数用于将获取到的电影信息写入CSV文件中。使用`csv`模块的`writer`函数将电影信息写入CSV文件。
在`if __name__ == '__main__':`中,我们创建了一个线程列表,并循环创建线程,每个线程负责爬取一页电影信息。我们使用`threading.Thread`函数创建线程,将`get_movie_info`函数作为线程的目标函数,并将页码作为参数传递给函数。
然后,我们循环启动所有线程,等待所有线程完成后再退出程序。使用`join`函数等待所有线程完成。