请教一下论坛的朋友们,为何我用这个 csv.DictWriter往excel里保存数据,速度超级慢?基本龟速,半天不出来,那里有问题嘛?如何提高写入速度呢?
import csv
f = open('spider.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'交易时间',
'交易权属',
'供暖方式',
'单价',
'套内面积',
'建成年代',
'建筑类型',
'建筑结构',
'建筑面积',
'总价',
'户型结构',
'房屋年限',
'房屋户型',
'房屋朝向',
'房屋用途',
'房权所属',
'所在楼层',
'挂牌价',
'挂牌时间',
'标题',
'梯户比例',
'装修情况',
'配备电梯',
'链家编号',
])
csv_writer.writeheader()#写入表头
cookies = {}
headers = {}
for i in range(1, 2):
time.sleep(3)
url = f'https://pg{i}'
response= requests.get(url, cookies=cookies, headers=headers) #2.获取数据,获取网页源代码。(响应体的文本数据)所以是response.text,if你请求的是jason,那就是response.jason.if是图片格式,就写图片格式
#print(response.text)#基本爬其他网站也这样,可能改的地方就是headers请求头的完整性,url地址和get的方式。
#response.text获取的是一个字符串数据类型,if想直接解析字符串类型,是parsel是没有办法的。此时要用re正则表达式可以。因为parsel没法对字符串直接解析,
#所以,转一下类型。即:
selector = parsel.Selector(response.text)
href = selector.css('.listContent li .title a::attr(href)').getall()
for index in href:
html_data = requests.get(url=index, cookies=cookies, headers=headers).text
selector_1 = parsel.Selector(html_data)#转换成字符串用于提取
title = selector_1.css('.house-title .wrapper::text').get().replace(' ','')# 标题
dealdate = selector_1.css('.house-title .wrapper span::text').get() #交易时间
totalprice = selector_1.css('.price .dealTotalPrice i::text').get() +'万' #总价
unitprice = selector_1.css('.price b::text').get() +'元' #单价
guapaiprice = selector_1.css('.msg span:nth-child(1) label::text').get() +'万'#挂牌价
base_label = selector_1.css('.base .content li .label::text').getall()#键 把下面基本属性标签名称全部取出来。
base_content = selector_1.css('.base .content li::text').getall() #这里直接取li下面的text就不需要提取label标签了。
base_content = [i.strip() for i in base_content]
dit_1 = dict(zip(base_label, base_content)) #转成字典数据。why?因为待会要保存成表格数据。
jiaoyi_label = selector_1.css('.transaction .content li .label::text').getall()#键 把下面交易属性标签名称全部取出来。
jiaoyi_content = selector_1.css('.transaction .content li::text').getall() #这里直接取li下面的text就不需要提取label标签了。
jiaoyi_content = [i.strip() for i in jiaoyi_content]
dit_2 = dict(zip(jiaoyi_label, jiaoyi_content)) #转成字典数据。why?因为待会要保存成表格数据。
dit={
'标题':title,
'总价':totalprice,
'单价':unitprice,
'交易时间':dealdate,
'挂牌价':guapaiprice,
}
dit.update(dit_1)
dit.update(dit_2)
#print(dit)
csv_writer.writerow(dit)
#pprint.pprint(dit)
回答:你这个是网页爬取数据哈,一般应该是网页爬取的问题,这个速度会占比更多,文件读写应该不会占用很多时间的;至于网页爬取的速度如何加快,这个你可以考虑多开几个脚本,然后让它们处理不同区段的内容,最后你再对文件综合一下即可