python如何将爬取的数据写入csv
时间: 2023-09-30 19:06:31 浏览: 76
要将爬取的数据写入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后日期列显示为####
这个问题通常是因为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')
```
将之前的网页内容爬取后写入csv
要将之前提取的网页内容写入CSV文件,你可以使用Python的csv模块来实现。以下是修改后的代码:
```python
import os
import re
import csv
from bs4 import BeautifulSoup
# 设置html文件路径
folder_path = r'C:\Users\test\Desktop\DIDItest'
output_file = r'C:\Users\test\Desktop\output.csv'
# 提取html文件内所需要数据
def extract_html_info(file_path, csv_writer):
with open(file_path, 'r', encoding='utf-8') as file:
# 读取HTML源代码
html = file.read()
soup = BeautifulSoup(html, 'html.parser')
# 提取所有的<p>标签
p_tags = soup.find_all('p')
for p_tag in p_tags:
# 提取ID
talk_id = p_tag.find_previous(string=lambda text: isinstance(text, str) and '[talkid:' in text)
talk_id = talk_id.strip('[talkid:]')
# 提取时间
timestamp = p_tag.find_previous('body').find_previous('head').find('meta', {'http-equiv': 'Content=-Type'})['content']
# 提取发送号码
send_number = p_tag.find('span', {'class': 'hint-success'}).text
# 提取接收号码
receive_number = p_tag.find_all('span', {'class': 'hint-success'})[1].text
# 提取信息内容
message = p_tag.previous_sibling.strip()
# 判断是否是音频
if '音频' in message:
file_url = p_tag.find('a')['href']
csv_writer.writerow([talk_id, timestamp, send_number, receive_number, file_url])
else:
csv_writer.writerow([talk_id, timestamp, send_number, receive_number, message])
# 创建CSV文件并写入数据
with open(output_file, 'w', newline='', encoding='utf-8') as file:
csv_writer = csv.writer(file)
csv_writer.writerow(['ID', '时间', '发送号码', '接收号码', '内容'])
# 遍历文件夹及子文件夹,提取HTML文件信息
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith('.html'):
file_path = os.path.join(root, file)
extract_html_info(file_path, csv_writer)
print("数据已成功写入CSV文件。")
```
在这个修改后的代码中,我添加了一个`output_file`变量来指定输出的CSV文件路径。然后,在`extract_html_info`函数中,我使用`csv_writer.writerow()`方法将提取的数据逐行写入CSV文件。
最后,在主程序中,我使用`open()`函数创建了CSV文件,并传递给`csv.writer()`方法创建了一个`csv_writer`对象。然后,我使用`csv_writer.writerow()`方法将表头和提取的数据写入CSV文件。
希望这次能够满足你的需求!如果你还有其他问题,请随时提问。
阅读全文