版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
能力要求能通过学习本章知识,了解存储网络采集得到数据的方法。掌握HTML数据抽取的相关数据。熟悉数据存储到MySQL数据库的方法。找寻更适合采集数据得存储方法。1HTML正文抽取2MySQL数据库3更适合网络数据采集的MongoDB目录4.1HTML正文抽取4.1HTML正文抽取对HTML正文的抽取存储,主要是指将HTML文档的主要组成元素抽取出来。HTML正文存储为两种格式:JSON和CSV(Comma-SeparatedValues,逗号分隔符)。以一个小说阅读网为例,HTML正文抽取就是抽取出标题、章节、章节名称和链接。首先需要说明的是,这是一个静态网站,标题、章节、章节名称都不是由JavaScript动态加载的,这是下面所进行工作的前提。这个例子使用前面所介绍的BeautifulSoup和lxml两种方式进行解析抽取,力求将之前的知识进行灵活运用。1存储为JSON格式首先使用Requests访问小说阅读网,获取HTML文档内容,并且打印文档内容,相关代码如下。importrequestsUser_agent='Mozila/4.0(compatible;WindowsNT)Headers=('User-Agent';user_agent)r=requests.get('/',headers=headers)Printr.txt运行上述代码,得到的运行结果接着分析网站首页的HTML结构,确定要抽取标记的位置,分析如下:标题和章节都被包含在<divclass=mulu>标记下,标题位于<divclass=mulu-title>的<h2>中,章节位于<divclass=box>下的<a>中。经过上述的分析接下来就可以进行编码了,代码示例如下。Soup=BeautifulSoup(r.rtxt,'html,parser',from_encoding='utf-8')#html.parserFormuluinsoup.find_all(class_=mulu);h2=mulu.find('h2)Ifh2!=None;H2_title=h2.string#获取标题Forainmulu.find(class_='box').find_all('a');#获取a标记中URL和章节内容Href=a.get('href)Box_tirle=a.get('title)Printhref,box_title1存储为JSON格式存储为CSV格式CSV(Comma-SeparatedValues,逗号分隔值)是存储表格数据的常用文件格式。MicrosoftExcel和很多应用都支持CSV格式,因为它很简洁。和Python一样,CSV中的留白(whitespace)也是很重要的:每一行都用一个换行符分隔,列与列之间用逗号分隔(因此也叫“逗号分隔值”)。CSV文件还可以用Tab字符或其他字符分隔行,但是不太常见,用得不多。如果只想从网页上把CSV文件下载到计算机里,不打算做任何解析和修改,那么这节后面的内容就没必要再看了。只要用上一节里介绍的文件下载方法下载并保存为CSV格式就行了。Python的csv库可以非常简单地修改CSV文件,甚至从零开始创建一个CSV文件。网络数据采集的一个常用功能就是获取HTML表格并写入CSV文件。维基百科的文本编辑器对比词条中用了许多复杂的HTML表格,用到了颜色、链接、排序,以及其他在写入CSV文件之前需要忽略的HTML元素。用BeautifulSoup和get_text()函数,可以用十几行代码完成这件事。importcsvfromurllib.requestimporturlopenfrombs4importBeautifulSouphtml=urlopen(/wiki/Comparison_of_text_editors)bsObj=BeautifulSoup(html)#主对比表格是当前页面上的第一个表格table=bsObj.findAll(table,{class:wikitable})[0]rows=table.findAll(tr)csvFile=open(../files/editors.csv,'wt',newline=,encoding='utf-8')writer=csv.writer(csvFile)try:forrowinrows:csvRow=[]forcellinrow.findAll(['td','th']):csvRow.append(cell.get_text())writer.writerow(csvRow)finally:csvFile.close()1HTML正文抽取2MySQL数据库3更适合网络数据采集的MongoDB目录4.2MySQL数据库由于MySQL的安装文件比较大且配置稍显烦琐,本书推荐在普通环境下使用集成包,比如USBWebserver。Python没有内置的MySQL支持工具。不过,有很多开源的库可以用来与MySQL交互,比如Python2.x和Python3.x版本都支持,其中最有名的一个库就是PyMySQL(/PyMySQL/PyMySQL)。目前,PyMySQL的版本是0.6.2,可以用下面的命令下载并安装。#curl-L/PyMySQL/PyMySQL/tarball/pyMySQL-0.6.2|tarxz#cdPyMySQL-PyMySQL-f953785/#pythonsetup.pyinstall在数据采集中使用MySQL在Python中使用MySQL有两种方式,分别为ORM(对象关系映射)框架和数据库模块,在此使用数据库模块pyMySQL(Python3)。安装pyMySQL的代码如下。pipinstallpyMySQL直接使用print将数据打印了出来。现在使用pyMySQL将数据存储到MySQL中。此时需创建数据库toutiao和数据表data。修改的代码如下。修改的代码importrequestsimportjsonimportpyMySQLconn=pyMySQL.connect(host='localhost',port=3307,user='root',password='usbw',db='toutiao',charset='utf8')cursor=conn.cursor()url='/api/pc/focus/'wbdata=requests.get(url).textdata=json.loads(wbdata)news=data['data']['pc_feed_focus']forninnews:title=n['title']img_url=n['image_url']url=n['media_url']print(url,title,img_url)cursor.execute(INSERTINTOdata(title,img_url,url)VALUES('{0}','{1}','{2}');.format(title,img_url,url))mit()cursor.close()conn.close()1HTML正文抽取2MySQL数据库3更适合网络数据采集的MongoDB目录4.3更适合网络数据采集的MongoDBMongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是目前非关系数据库当中功能最丰富、最像关系数据库的数据库。3.运行pymongo命令该命令的使用格式如下。pipinstallpymongo要想检测安装是否成功,可以使用如下命令在本地启动MongoDB。#mongd-dbpathl然后,在Python中,使用MongoDB的默认端口尝试连接MongoDB,示例如下。>frompymongoimportMongoClient>client=MongoClient('localhost',27017)Python操作MongoDB依然是扩展采集今日头条的例子,Python操作MongoDB的代码示例如下importrequestsimportjsonimportpymongoconn=pymongo.MongoClient(host='localhost',port=27017)toutiao=conn['toutiao']newsdata=toutiao['news']url='/api/pc/focus/'wbdata=requests.get(url).textdata=json.loads(wbdata)news=data['data']['pc_feed_focus']forninnews:title=n['title']img_url=n['image_url']url=n['media_url']data={'title':title,'img_url':img_url,'-id':url}newsdata.insert_one(data)foriinnewsdata.find():print(i)本章小结本章介绍3种通过网络数据采集所得到数据进行存储的方式,在不同的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 疼痛学(中级358)基础知识卫生专业技术资格考试巩固策略精析(2026年)
- 专题6.1 反比例函数-北师大版九年级《数学》上册培优讲义
- 舆情监测数据服务供应合同2026
- 线上线下生产管理合作协议
- 2026年管理时间测试题及答案
- 2026年包装印刷测试题及答案
- 2026年高二化学实验测试题及答案
- 2026年法学简单测试题及答案
- 2026年公司面逻辑测试题及答案
- 2026年心理罪预告测试题及答案
- 山东省烟台市2025-2026学年高一下学期7月期末地理试题(文字版含答案)
- 医疗废弃物综合监管平台建设方案
- 人教版五年级语文上册阅读理解训练(15篇)
- 2025年甘肃省金昌市公务员招聘考试试题及答案详解
- T∕CNLIC 0201-2025 油墨和粘合剂空桶综合利用技术规范
- 2026人教版三年级下册数学期末水平检测卷(一)
- 消防安全四懂四会知识培训
- 光伏电站运维交接实施方案
- DL-T5434-2021电力建设工程监理规范
- 纺织类专业日语词汇大全
- 公路工程质量检验评定标准 第二册机电工程 JTG 2182-2020
评论
0/150
提交评论