分享好友 最新动态首页 最新动态分类 切换频道
python爬虫接单经历_一个Python小白5个小时爬虫经历 【续】
2024-12-27 13:01

前言

昨天实现了python简单的数据采集之后本来还挺高兴的,结果发现在.NET读取txt文件后反序列化总是报错。具体错误原因好像是从txt读取数据之后会自动加一个隐藏的字符串,没错,肉眼看不见,就导致不是合法的json格式,最终失败。不说了,反序列化浪费了我大量的时间,下面进入正题。

代码重构

问题就出来保存上,所以保存的文件我首先把 .txt 换成 .json 文件,后来在仔细看生成的文档,发现少了中括号[]和每条数据之间的逗号。于是乎,修改后的代码如下。

importmatchimportosimportdatetimeimportjsondefwriteToTxt(list_name,file_path):try:#这里直接write item 即可,不要自己给序列化在写入,会导致json格式不正确的问题

fp = open(file_path,"w+",encoding='utf-8')

l=len(list_name)

i=0#添加左中括号

fp.write('[')for item inlist_name:#直接将项目write到 json文件中

fp.write(item)#添加每一项之间的逗号

if i

fp.write(', ')

i+= 1fp.write(']')#添加右中括号

fp.close()exceptIOError:print("fail to open file")#def getStr(item):#之前用这段代码处理item,后来发现,不用处理,直接保存反而更好,自己处理了,会导致博客中乱七八糟的字符影响反序列化#return str(item).replace(''','"')+', '

defsaveBlogs():for i in range(1,2):print('request for'+str(i)+'...')

blogs= match.blogParser(i,10)#保存到文件

path =createFile()

writeToTxt(blogs,path+'/blog_'+ str(i) +'.json')print('第'+ str(i) +'页已经完成')return 'success'

defcreateFile():

date= datetime.datetime.now().strftime('%Y-%m-%d')

path= '/'+dateifos.path.exists(path):returnpathelse:

os.mkdir(path)returnpath

result=saveBlogs()print(result)

最终生成了完美的json。下图只粘贴其中一项,当然是我昨天发的那篇啦。PS 前篇地址:http://www.cnblogs.com/panzi/p/6421826.html

转战.NET CORE

终于把数据格式搞定了。下面就是到数据的事情了,很简单,不过在写代码过程中顺便看了一下 .NET Core的文件系统[3]:由PhysicalFileProvider构建的物理文件系统 。然后进行实战。首先,json都存放在在文件中,肯定要遍历文件了。

从那篇博客中copy部分代码,来实现文件系统的访问和解析。

定义IFileManager 接口

public interfaceIFileManager

{///

///读取文件,获取文件内容///

///

void HandleFile(ActionfileHandler);

}

然后实现接口内容,主要呢,第一,遍历文件夹得到文件,然后输出相应的文件内容。第二,反序列化文本内容转成实体。第三,加入到Elastisearch中。

public IFileProvider FileProvider { get; private set; }publicFileManager(IFileProvider fileProvider)

{this.FileProvider =fileProvider;

}public void HandleFile(ActionfileHandler)

{//通过FileProvider读取文件,遍历

foreach (var fileInfo in this.FileProvider.GetDirectoryContents(""))

{//读取文件内容(json

string result =ReadAllTextAsync(fileInfo.Name).Result;//执行处理

fileHandler(result);

}

}

以上为FileManger部分代码。

然后反序列化得到的文本内容。

//遍历已经搜集好的json文档

manager.HandleFile(json =>{//反序列化得到实体

var entities = serializer.JsonToEntities(json);//批量添加到ES中

int result =search.IndexMany(entities);

Console.WriteLine("加入" + result + "数据");

});

当然,程序启动的时候要注册相应的服务。

public staticIServiceProvider RegisterServices() {string folder = DateTime.Now.ToString("yyyy-MM-dd");var service = newServiceCollection()//定位到文件夹,当前日期

.AddSingleton(new PhysicalFileProvider($@"D:{folder}"))

.AddSingleton()//序列化器

.AddSingleton()

.BuildServiceProvider();returnservice;

}

运行结果

至于为什么是180条,因为我在python获取接口的时候写的是 for in range(1,10),每次请求接口返回20条,请求了9次,然后合并成一个json文件存储。

好的,最后在看一下ES中的数据

总结

最新文章
百度发布大数据众智开放平台“点石” 携手行业伙伴加速产业发展
数据是AI时代的燃料。7月4日,百度AI开发者大会(Baidu Create 2018)在北京召开。百度大脑论坛上,百度大数据部高级总监郭谢介绍了基于百度大数据技术的产品生态圈,并发布大数据众智开放平台“点石”(dianshi.baidu.com),提升数据处理效
高清美女写真生成攻略:用搜狐简单AI打造你的虚拟偶像
打开你手机上的微信,搜索“搜狐简单AI”小程序,或者直接访问其官网。步骤2:选择生成类型在主页选择“美女写真”选项,系统会引导你到生成界面。步骤3:上传或选择基础素材你可以选择从图库中上传一张照片,或者使用系统自带的模板。步骤
苹果大动作!全新苹果智能来了!OpenAI重磅官宣:将ChatGPT全面接入苹果设备
每经编辑 杜宇据中证金牛座,当地时间12月11日,苹果发布iOS 18.2、iPadOS 18.2和macOS Sequoia 15.2,同时推出一组全新苹果智能功能,在此前已推出的首批功能基础上,进一步提升用户的iPhone、iPad和Mac使用体验。苹果称,苹果智能是一套
重点建设学科软件投入与执行情况验收表模板
《重点建设学科软件投入与执行情况验收表模板》由会员分享,可在线阅读,更多相关《重点建设学科软件投入与执行情况验收表模板(1页珍藏版)》请在装配图网上搜索。
警惕!手机里的这些APP一定要卸载!!!
国家计算机病毒应急处理中心近期通过互联网监测发现,这些移动App存在隐私不合规行为。1、未声明App运营者的基本情况、未声明隐私政策时效。涉及10款App如下:《医家助手》(版本1.11,应用宝)、《乐护》(版本1.08,)、《亲亲熊识字》(
百度地图修改店铺名称
实体店为什么要在微信上做?现在很多聚餐约会,都会提前在美团或者其他平台选择好门店,在微信发送位置给朋友,这个时候要是你的门店在微信发送位置时搜索不到,可能就会损失一定的客户,微信位置看似小,但却很重要,能给客户带来很多便利
无需插件即可优化 WordPress 速度的 12 种策略
为什么要尝试在没有插件的情况下优化 WordPress 网站的速度?缓慢的网站不仅仅会带来一些小不便,而且当您尝试建立在线成功时,它是一个重大障碍。事实上,根据Portent2022 年的一项研究,在加载页面的前五秒内,每增加一秒,网站转化率平
精品与普通商品之间的差异究竟体现在哪些方面?
在现今的商品市场中,我们经常听到“精品”一词,而这一词汇正是消费者对高质量、高价值的商品所做的总结性描述。那么,精品与普通商品之间的差异究竟体现在哪些方面呢?以下为您进行详细的解析。精品往往在设计中融入了独特的创意和设计理
全球十大购物网站排行榜(转)
  现今社会所有都计算机化,你只需拥有一台计算机,连接互联网,便可以轻轻松松地把所有事情处理妥当,大至个人财务金融管理、小至买本书或买件衫,都可于网络上完成交易。话虽如此,但对于fashion人来讲,最大乐趣莫过于逛街试衫,享受
相关文章
推荐文章
发表评论
0评