版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目4爬虫与数据存储——抓取网页并存储任务4.1CSV存储4.1.1
CSV介绍CSV(逗号分隔值文件格式),也称字符分隔值。CSV文件一般以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含需要像二进制数字那样解读的数据。以下是一个CSV文件:
姓名,年龄,性别张三,25,男李四,30,女王五,,男
这是一个典型的CSV文件,可以从以下几方面进行分析。(1)表头:第一行是字段名。如姓名,年龄,性别,表示每列数据的含义。(2)数据行:后续每一行是一条数据记录,其中第4行存在空字段。4.1.2利用Python读取CSV文件【例4-1】利用Python将数据写入CSV文件。
importcsv#将数据写入CSV文件#newline=''用于防止在Windows上写入空行withopen('data.csv',mode='w',newline='',encoding='utf-8-sig')asf:writer=csv.writer(f)#写入表头writer.writerow(['姓名','年龄','性别'])#写入多行数据writer.writerows([['张三',25,'男'],['李四',30,'女'],['王五',23,'男']])4.1.3爬虫与CSV存储假设用户爬取了以下数据:
data=[{"name":"无线蓝牙耳机","price":"¥299.00","rating":4.8,"reviews":1567},{"name":"智能手表","price":"¥599.00","rating":4.6,"reviews":892},{"name":"降噪耳机","price":"¥799.00","rating":4.9,"reviews":2103}]
将以上数据保存为products.csv文件后,内容如下:
name,price,rating,reviews无线蓝牙耳机,¥299.00,4.8,1567智能手表,¥599.00,4.6,892降噪耳机,¥799.00,4.9,21034.1.3爬虫与CSV存储【例4-2】将本地网页数据抓取后保存为CSV格式。第1步:准备一个网页,内容如下。
<!DOCTYPEhtml><htmllang="zh"><head><metacharset="UTF-8"><title>电影列表</title></head><body><h1>热门电影</h1><tableborder="1"><tr><th>电影名称</th><th>上映年份</th><th>评分</th></tr><tr><td>肖申克的救赎</td><td>1994</td><td>9.7</td></tr><tr><td>阿甘正传</td><td>1994</td><td>9.5</td></tr><tr><td>星际穿越</td><td>2014</td><td>9.3</td></tr></table></body></html>
将该文件保存为movies.html,并在浏览器中运行,网页效果如图4-2所示。将该网页放到本地目录下,与Python脚本置于同一目录中。使用Requests和BeautifulSoup解析HTML内容,并提取表格数据。代码如下。
importrequestsfrombs4importBeautifulSoupimportcsv#读取本地HTML文件或请求远程网页url='movies.html'withopen(url,'r',encoding='utf-8-sig')asf:html_content=f.read()#解析HTML内容soup=BeautifulSoup(html_content,'html.parser')#找到表格table=soup.find('table')#提取表头headers=[header.get_text(strip=True)forheaderintable.find_all('th')]#提取每一行数据rows=[]forrowintable.find_all('tr')[1:]: #跳过表头行cols=row.find_all(['td'])cols=[col.get_text(strip=True)forcolincols]rows.append(cols)
#将数据写入CSV文件csv_file='movies_data.csv'withopen(csv_file,mode='w',newline='',encoding='utf-8-sig')asf:writer=csv.writer(f)writer.writerow(headers) #写入表头writer.writerows(rows) #写入数据行
print(f"数据已成功写入{csv_file}")打开生成的movies_data.csv,内容如图4-4所示。任务4.2MySQL存储4.2.1
MySQL介绍MySQL是一个小型的关系数据库管理系统,凭借软件体积小、运行速度快、操作便捷等优点,目前已被广泛应用于Web端中小企业网站的后台数据库。
在网络爬虫项目中,MySQL主要扮演“数据持久化”的角色。也就是说,当爬虫从网页中抓取到数据后,可以将这些数据存储到MySQL中,以便后续开展查询、分析、展示等操作。
PyMySQL是一个纯Python实现的MySQL客户端库,它支持用户通过Python脚本直接与MySQL进行交互。相教于其他ORM框架,PyMySQL提供了更底层的操作能力,允许用户直接编写SQL语句对数据库进行操作。4.2.2
MySQL操作
登录MySQL官网,进入下载页面,下载对应操作系统的版本。本项目下载的MySQL版本是MySQL5.6(读者也可下载MySQL8.0版本,其执行方式与下文一致)4.2.2
MySQL操作
在本地计算机完成MySQL安装后,在Windows命令行中输入mysql-uroot-p命令,即可进入MySQL的命令行模式,此时系统会要求输入预先设置的密码,如图4-9所示。4.2.2
MySQL操作
【例4-4】在数据库中创建数据表。在MySQL中创建数据表可以通过createtable命令完成,其中table语句后需要紧跟待创建数据表的名称。例如,在数据库stu中创建学生信息表user,命令如下:
createtableuser(idchar(6)notnullprimarykey,namechar(6)notnull,scoretinyint(1)null);4.2.2
MySQL操作
在大数据领域,常常需要将电商网站上的数据爬取下来并存储到MySQL中,以便后续的数据分析。在Python中,想要连接MySQL,需要借助驱动实现与数据库的交互。在Python3中,可以通过PyMySQL库实现这一功能。PyMySQL是一个纯Python库,可以直接安装使用2.安装与使用PyMySQL4.2.2
MySQL操作
使用PyMySQL操作MySQL的基本步骤如下。(1)连接数据库。使用pymysql.connect方法建立与MySQL的连接。
importpymysqlconn=pymysql.connect(host='localhost', #主机地址(本地为localhost)user='root', #登录数据库的用户名password='your_password', #登录密码,如123456database='test_db', #待连接数据库的名称charset='utf8mb4', #字符集编码,支持中文cursorclass=pymysql.cursors.DictCursor #可选项,用于返回字典形式的结果)
4.2.2
MySQL操作(2)创建游标。在数据库操作中,游标(Cursor)是一个数据库对象,它支持用户执行SQL语句并获取结果。读者可以将游标理解为一个“操作数据库的工具”,就像用鼠标去单击按钮一样,程序通过游标执行数据库命令。创建游标的语句如下。
cursor=conn.cursor()#创建游标
4.2.2
MySQL操作(3)执行SQL语句。根据需求执行不同的SQL语句,如插入、查询等操作。①插入数据:
sql="INSERTINTOusers(name,age)VALUES(%s,%s)"cursor.execute(sql,('张三',25))
②批量插入数据:
data=[('李四',30),('王五',28)]cursor.executemany(sql,data)
③查询数据:
sql="SELECTid,nameFROMusersWHEREage>%s"cursor.execute(sql,(25,))results=cursor.fetchall()forrowinresults:print(row)
4.2.2
MySQL操作(4)提交事务。提交事务的语句如下。
mit()
只有执行insert、update、delete等写入操作时,才需要提交事务。提交事务是确保用户对数据库所做的更改(如插入、更新等)真正生效的关键步骤。如果忘记调用mit(),则数据将不会被写入数据库。4.2.2
MySQL操作(5)关闭游标和连接。需要确保程序结束时关闭数据库连接,以释放相关系统资源。关闭游标和连接的语句如下。
cursor.close()#关闭当前使用的游标对象conn.close()#关闭与MySQL的数据库连接4.2.2
MySQL操作【例4-5】执行SQL语句将数据存储到MySQL中并查询。第1步:在MySQL中创建数据库stu。第2步:编写代码。
importpymysqldb=pymysql.connect(host='localhost',user='root',passwd='123456',db='stu', #stu需要提前创建charset='utf8',)cursor=db.cursor()sql="insertintos01(id,name,age)values(%s,%s,%s)"cursor.executemany(sql,[("1005","unity","23"),("1006","ben","21")])mit()cursor.execute("select*froms01") #输出全部数据data=cursor.fetchall()print(data)cursor.execute("select*froms01whereage>22") #输出年龄大于22的数据data=cursor.fetchall()print(data)使用PyMySQL4.2.2
MySQL操作【例4-6】使用PyMySQL将列表中的数据存储到MySQL中。第1步:启动MySQL,创建数据库movie_db,如图4-15所示。4.2.2
MySQL操作第2步:编写代码。
importpymysql#示例数据,定义一个包含3部电影的列表#列表中每部电影以字典形式存储,包含的字段为标题、年份、评分movies=[{'title':'肖申克的救赎','year':1994,'rating':9.7},{'title':'阿甘正传','year':1994,'rating':9.5},{'title':'星际穿越','year':2014,'rating':9.3}]
#连接数据库conn=pymysql.connect(host='localhost',user='root',password='123456',database='movie_db',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)try:withconn.cursor()ascursor:#创建数据表(如果不存在)create_table_sql="""CREATETABLEIFNOTEXISTSmovies(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(255)NOTNULL,yearINT,ratingFLOAT)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;"""cursor.execute(create_table_sql)#插入数据insert_sql="INSERTINTOmovies(title,year,rating)VALUES(%s,%s,%s)"#准备批量插入的数据data_to_insert=[(m['title'],m['year'],m['rating'])forminmovies]#批量插入数据cursor.executemany(insert_sql,data_to_insert)#提交事务mit()exceptExceptionase:print("发生错误:",e)conn.rollback()#回滚事务finally:conn.close()项目实战
抓取网页数据并将其存储到MySQL中【任务描述】利用BeautifulSoup抓取本地服务器中的网页数据,并将其存储到MySQL中。1.创建网页新建网页,名称为1.html,内容如下。
<!DOCTYPEhtml><html><head><title>MyWebPage</title></head><body><h1>WelcometoMyWebPage</h1><tableid="data-table"><tr><th>ID</th><th>Name</th><th>Age</th></tr><tr><td>1</td><td>Alice</td><td>30</td></tr><tr><td>2</td><td>Bob</td><td>25</td></tr><!--更多的数据行--></table></body></html>2.构建本地服务器使用python-mhttp.server8080命令在本地运行一个Web服务器,并将1.html网页存储到Web服务器中,如图4-18所示。在浏览器中输入地址:http://localhost:8080/1.html,即可查看该网页中的内容,如图4-19所示。3.创建数据库及数据表运行MySQL,在数据库test中创建数据表user3,如图4-20所示。数据表中包含id、name及age字段,这些字段需要与对1.html中的数据一一对应,以确保表结构能够存储这些数据。4.编写代码在Python中编写以下代码,用于抓取该网页中的数据。
importrequestsfrombs4importBeautifulSoup#假设网页位于本地服务器url='http://localhost:8080/1.html'response=requests.get(url)ifresponse.status_code==200:soup=BeautifulSoup(response.text,'html.parser')table=soup.find('table',{'id':'data-table'})rows=table.find_all('tr')[1:] #跳过表头
data=[] #初始化一个空列表data,用于存储所有从表格中提取的数据forrowinrows: #遍历传入的每一行(rows)#在当前行中查找所有<td>标签(表格单元格),并将这些标签存入列表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财务审计咨询服务协议2026
- 保密协议(工程2026年)
- 2026年医院进修人员培训与考核方案
- 2026年城市亮化工程中的光健康研究与应用
- 2026年陕西中烟工业公司招聘考试笔试试题(含答案)
- 2026春小学信息技术重大版五年级下册期末练习卷含答案
- 2026年抑郁标准症测试题及答案
- 2026年职场英语初级测试题及答案
- 2026年desc测试题及答案
- 2026年国际学校 入学测试题及答案
- 2026年辽宁锦州海通实业有限公司计划招录28人备考题库及一套完整答案详解
- 电梯困人救援操作规范培训
- 2025年贵州省委党校在职研究生招生考试(领导科学专业面试)题库含答案详解
- 2026年国家开放大学电大本科《工程经济与管理》期末标准经典例题【考试直接用】附答案详解
- 2026年湖南地理中考试卷及答案
- 内部劳动保障工作制度
- 普洱市镇沅县勐真水库工程环评报告
- 小学二年级下学期语文无纸化测试题
- GB/T 90.1-2023紧固件验收检查
- 现代全口义齿学智慧树知到答案章节测试2023年浙江大学
- GB/T 16400-2015绝热用硅酸铝棉及其制品
评论
0/150
提交评论