2、Python操作数据库、 Python爬虫
代码可视化工具python Tutor
推荐一个python数据结构可视化工具:http://www.pythontutor.com/visualize.html#mode=edit
mysql数据库的基本操作
excel不能叫数据库,只能叫表哥操作软件。
musql数据库:关系型数据库管理系统,开源,性能高,成本低,中小型网站,更大规模的:google、维基百科、facebook上,2013年被甲骨文oracle收购,oracle大幅提高商业版价格,对于社区版支不支持前途未卜,mysql创始人出来以mysql为基础成立了分支:MariaDB,目的是完全兼容mysql的api、命令行,使之能完全成为mysql的替代品。
非关系型数据库:mongodb、radis
打开今日头条--右键审查元素--会打开开发者工具界面
今日头条界面下滑--开发者工具界面的:network--XHR--出现两个链接(异步加载了今日头条的链接)
复制链接用浏览器打开--打开一个界面
可以看见界面是一个嵌套层次非常多的一个字典,这种格式通常叫做json格式。
一般web应用写接口的时候,通常都会写成json格式,因为它有非常简洁和清晰的层次结构,使JSON成为非常理想的数据交换语言。
用浏览器访问如上链接,其实就是用json的数据格式,用浏览器跟今日头条的后台程序进行交互,而且易于阅读和编写,同时易于机器的解析和生成,所以有效利于网络的传输效率。在python中存在着json模块,只需要:import json。
非关系型数据库如何存储数据:
在桌面新建一个文件data.json,文件内容就是json数据{‘a':100,'b':200},可以通过json模块来访问json数据,导入json模块的方式是import json。
json的数据库就是非关系型数据库存储的样式,它是一种json格式的文件的形式存数的。
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。
json.load它接受一个fp,实际是一个文章的句柄。
打开文件在python中是:with open('~')
把具体绝对路径替换掉~,也就是:with open('C:\Users\zc\Desktop\data.json')
未成功,是因为用的单引号,应改为双引号。
import json
with open('C:\Users\zc\Desktop\data.json',‘r’) as f:
j_data=json.load(f)
print(j_data)
命令行操作数据库
mysql 数据类型
命令行操作mysql太麻烦,还不如用python操作MySQL。
用python操作数据库
命令行操作mysql太麻烦,还不如用python操作MySQL。
windows下用navicat进行连接和管理mysql/oracle数据库。苹果笔记本用sqlpro
Python 安装MySQLdb模块,用国内豆瓣镜像安装指令:pip install mysql -i http://pypi.douban.com/simple --trusted-host pypi.douban.com --user
连接数据库:MYSQLdb.connect()
如下图中的db就代表数据库
可以用游标来操作数据库,游标:cursor(),在cursor=cursor()后可以用游标执行sql语句:cursor.execute(),执行之后可以cursor.fetchall()来获取所有结果
乱码是因为在连接数据库的时候没有按照字符集指定编码格式
添加编码格式是:utf8mb4
where id <=20
limit 10 是限制10条数据
执行插入操作:需要新生成一个游标:cursor(),在cursor=cursor()后可以用游标执行sql语句:cursor.execute(),db代表了数据库,db=mysql.connect(),可通过db.commit()来提交记录到数据库。
插入、删除、更新操作:
编写python爬虫并保存到数据库
如图是今日头条的接口,接口数据都是结构非常清晰的数据。
链家网站的数据都是页面的,没办法通过接口的形式去获取它,就需要写爬虫爬取这个页面,再从页面中提取想要的元素。
主要依赖的python库有两个:requests用来获取页面内容、beautifulsoup分析页面结构提取想要的信息。
先查看是否已经安装了: pip install requests
pip install bs4
安装:pip install requests -i http://pypi.douban.com/simple --trusted-host pypi.douban.com --user
pip install bs4 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com --user
可以用ipython来测试一下:
查看文档,直接百度:requests文档、beautifulsoup文档
/zufang/后面跟着的是一个参数,通过参数从链家的数据库中去删选租房信息,然后返回。
在此不进行筛选,直接获取页面,有100个页面,这里我们只获取1个页面就够了。
200意味着页面成功获取到了数据,数据存储在其.text属性里。.text里就是url页面的源代码。
如果想要获得想要的信息,通过开发者工具--element元素
如下图页面变蓝,说明鼠标指到的那块控制的是这个变蓝部分的页面显示,所以不断展开继续往下查找。
如下图可以看见数据存储在LI中,把想要的数据需要从里面提取出来,就需要用到beautifulsoup。
如图所示,依然是返回的刚才的文本,不过给结构化了(换行、缩进)
通过.find_all()去找想要的元素,div可以理解为框的意思,div的元素class是last-wrap。
其实找的就是链接,如下图所示,链接是放在图片上的,点击图片就打开了链接,说明图片是带了<a>属性的。
图片带a属性
链接是存在于<div class=“pic-panel”>里的,目的是找<a>,把页面源代码中的所有链接找到,找到之后就可以挨个访问链接来获取信息;
不应该找之前大的那个<div class=“list-wrap”>,应该找<div class=“pic-panel”>,因为每个界面的这个都是一样的。
需要通过.find_all()来查找,由于class是一个关键字,所以用class_替代。
因为是find_all所以返回一个列表
查看第一个元素
提取一个链接就足够了
links_div[1].a.get('href')就提取出第二条链接了
如下方式提取一个页面的全部链接
把上面的代码用一个函数封装一下:
可以直接定位到具体代码块
因为不是列表,就直接.find(),而不需要.find_all()
8200是真正的文本, 通过.text直接输出8200
单位存放的地方:
.strip()的作用
所以
如下图,下面的信息都是在<p>里的class="lf"里面
列表形式提取出来,如下获取第0个元素
提取真正的文本
字符串切片,第三个字符往后的才是想要的【3:】
下面是查看户型
提取户型
依次类推
如下图只有<p>标签,没有class='xxx'
只填写<p>标签,无class的时候,生成一个列表
上图的列表中第四个元素是我们需要提取的
.text
切片
合并一下
如下图数据库中表已经构建了,只需要往数据库表里存放数据
给数据库封装
信息一下子就获取了
把一条数据写入数据库中
纠错后直接把一条数据写入数据库中
为避免频繁操作被禁ip
每2s刷新一次
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现