python-3.x - 将抓取结果一一保存到 Python 中的 Excel 或 CSV 文件中
问题描述
我有一个爬虫代码如下:
import requests
import json
import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
import re
from datetime import datetime
def crawl(id):
try:
url = 'https://www.china0001.com.cn/project/{0:06d}.html'.format(id)
print(url)
content = requests.get(url).text
soup = BeautifulSoup(content, 'lxml')
tbody = soup.find("table", attrs={"id":"mse_new"}).find("tbody", attrs={"class":"jg"})
tr = tbody.find_all("tr")
rows = []
for i in tr[1:]:
rows.append([j.text.strip() for j in i.findAll("td")])
out = dict([map(str.strip, y.split(':')) for x in rows for y in x])
return out
except AttributeError:
return False
data = list()
for id in range(699998, 700010):
print(id)
res = crawl(id)
if res:
data.append(res)
if len(data) > 0:
df = pd.DataFrame(data)
df.to_excel('test.xlsx', index = False)
在此代码中,df
整个抓取过程完成后,结果数据帧将写入 Excel 文件。
现在我想在抓取过程中将抓取结果一一保存到Excel或CSV文件中,我该如何修改上面的代码?
谢谢。
更新:
MAX_WORKERS = 30
ids = range(700000, 700050)
workers = min(MAX_WORKERS, len(ids))
with futures.ThreadPoolExecutor(workers) as executor:
res = executor.map(crawl, sorted(ids))
data = list(res)
if len(data) > 0:
df = pd.DataFrame(data)
df.to_csv('test.csv', mode = 'a', header = True, index = False)
解决方案
尝试to_csv
使用header=False, index=False
前任:
for id in range(699998, 700010):
res = crawl(id)
if res:
df = pd.DataFrame([res])
df.to_csv('test.csv', mode='a', header=False, index=False)
推荐阅读
- angular - Angular 6 GridDataResult' 不可分配给类型'Observable
- sql-server - SSRS 临时数据构建
- ms-access - 带有 IIF 和 DATEADD 函数的 MS Access 更新查询
- node.js - 使用 lambda 和 mysql 进行无限缩放最终会得到错误的数据
- javascript - 管道 PDF 到 Express Response 导致空白 PDF
- java - main 方法是获取初始化的数组还是命令行中的字符串在我键入时直接输入到参数中?
- image - drupal上的Base64图像问题
- spring - 什么是 Spring Boot 中的引导 yaml
- python - 如何在 Pandas 中将两列连接到另一个单独的列中?
- firebase - 为什么未来的 forEach 循环比预期的要多?