当前位置:首页 > 资讯 > 正文

python

python

1.临时修改

C:Usershuya>pip install requests -i http://pypi.douban.com/simple/
Looking in indexes: http://pypi.douban.com/simple/
Requirement already satisfied: requests in d:program filespython39libsite-packages (2.31.0)
Requirement already satisfied: certifi>=2017.4.17 in d:program filespython39libsite-packages (from requests) (2023.11.17)
Requirement already satisfied: charset-normalizer<4,>=2 in d:program filespython39libsite-packages (from requests) (3.3.2)
Requirement already satisfied: urllib3<3,>=1.21.1 in d:program filespython39libsite-packages (from requests) (2.1.0)
Requirement already satisfied: idna<4,>=2.5 in d:program filespython39libsite-packages (from requests) (3.6)
WARNING: You are using pip version 20.2.3; however, version 23.3.2 is available.
You should consider upgrading via the ‘d:program filespython39python.exe -m pip install --upgrade pip’ command.

C:Usershuya>

2.永久修改

pip config set global.index-url http://pypi.douban.com/simple/

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

换回默认源

pip config unset global.index-url

 
 

​ python -m pip install --upgrade pip

 
 

pip install requests 报错 要添加信任

解决方法: pip install requests --trusted-host pypi.douban.com

pip虚拟环境 --分离分割开发项目,保持项目环境纯净,互补影响

 
 
 

yum install python3 -y

使用python3

[root@localhost ~]# python3
Python 3.6.8 (default, Nov 14 2023, 16:29:52)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.

python3 e3.py //使用python3 运行文件e3.py

在函数内部更改全局变量

python基本语法和基本输入输出:

 

同一行中有多个语句用分号隔开

 

一行语句没有结束,可以使用续行符 接第二行语句

 
 
 

python3

yum install python3 -y

Python 3.6.8 (default, Nov 14 2023, 16:29:52)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.

在linux上完成python的简易代码:

#!/usr/bin/python3 //默认使用python3解释器

num1 = int(input(“请输入number1:”))
*num2 = int(input(“请输入number2:”))
sum_result = num1 + num2
print(f"result={sum_result}")

python2不支持中文的字符集

python3可以支持中文的字符集

if条件判断 循环语句: loop statement

for while

跳出循环: break continue

关键字–key word :python内部内置的一些名词(变量名),不允许我们自定义变量的时候使用

isdigit()是一个方法,理解为python里自带的 python编程里一切皆对象 num是对象

isalpha 判断是否是字母 isalnum 判断是否是字母和数字 isdigit 判断是否是数字 num.isnumeric 判断是否是数字 isupper 判断是否是大写字母 islower 判断是否是小写字母 isidentifier 判断字符串是否可以做变量名
isspace 判断是否是空格
isdecimal 是否是浮点数

[root@localhost python]# cat e2.py
num = input(“please input number:”)
if num.isdigit():
num = int(num)
if num == 80:
print(“good”)
elif num > 80:
print(“greater than 80”)
elif num > 70:
print(“greater than 70”)
else:
print(“less than 70”)
else:
print(“请输入数字”)
[root@localhost python]

容器类型: container 理解为装数据的地方 列表 list —》 C语言数组 元素之间用逗号隔开


for 循环控制次数

while控制循环次数 死循环:

i = 1
while True:
print(f"sanchuang{i}")
i += 1


变量的个数 1 值在变化 --》执行加法运算》cpu

模块 :本质就是.py文件,理解为别人造好的轮子,直接使用 import 进口 导入 export 出口

import time time.sleep(1) -->sleep 属于time python 文件里的一个函数 (方法) 一个函数实现一个功能 function

i = 1
while True:
print(f"sanchuang{i}")
i += 1
time.sleep(1)


i = 1
while True:
print(f"sanchuang{i}")
i += 1
time.sleep(1)
if i == 5:
break
print(“class over”)

[root@localhost python]#

break 跳出循环,不再执行循环后面的语句
continue 跳出本次循环,接着执行下一个循环

扩展:
导入模块 import
random
time
os

 
 
 
 
 
 
 
 
 
 
 
 
 
 

幂数运算符 + - * / % ** // #**幂运算 #// 地板除 向下取最接近除数的整数

 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 

如何学习模块?

 

模块ipaddress

 

模块os

 

模块psutil

 

练习

 
显示当前目录下单个文件的大小,及目录大小
输入后缀名和文件前缀,将指定类型的文件加上统一前缀
输入文件名和搜索的目录,将找到的文件路径输出

爬虫核心:

爬取网页:

解析数据:

存储数据:

分析数据:

难点:爬虫和反爬虫之间的博弈;

​ 爬虫会加大系统负载:并发(每秒访问的人数100) 爬虫1000

​ 什么是反爬虫?

​ 阻止非正常用户来访问我的系统

​ 登录站点:==》获取验证码(图片,手机)

​ 刷新太快请稍后重试

1.robots 协议(www.baidu.com/rebots.txt)

约束性: Robots 协议是建议但并非约束性,网络爬虫可以不遵守,但存在法律风险

作用:网站告知爬虫哪些页面就可以爬取,哪些不能爬取

2.检查User-Agent

·User Agent中文名为用户代理,简称UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及
版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
。网站可以通过检查该字段判断是否为浏览器

解决方法:
。可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用。

  1. ip 限制

如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,后台管理员可以编写IP限制,不让该IP继续访问。
。1s钟内10次 =>把ip放入黑名单,禁止在1h(5min)内访问
o nginx/other…
。解决方法:

。比较成熟的方式是:IP代理池
。降低访问频率(time.sleep(2))

4.session 访问限制

后台统计登录用户的操作,比如短时间的点击事件,请求数据事件,与正常值比对,用于区分用户是否处理异常状态,如果是,则限制登录用户操作权限。
·解决方法:
。注册多个账号、模拟正常操作。

  1. 验证码

    验证码是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式
    解决方法:
    。接入第三方验证码平台,实时破解网站的验证码

  2. 数据动态加载

    python的requests库只能爬取静态页面,爬取不了动态加载的页面。使用!S加载数据方式,能提高爬虫门槛。
    。解决方法:
    。抓包获取数据url
    oselenium 驱动真实的浏览器发送请求

  3. 数据加密-使用加密算法

前端加密 通过对查询参数、user-agent、验证码、cookie等前端数据进行加密生成一串加密指令,将加密指令作为参数,再进行服务器数据请求。该加密参数为空或者错误,服务器都不对请求进行响应。
·解决方法
。JS加密破解方式,就是要找到S的加密代码进行破解。

 
 
 
 
 
 
 
 
 
 
 
 

注册:https://www.heywhale.com/
思考:想一个自己想爬取的网站(有比较多的数据,抓取的数据分析一些什么内容,可视化)

 

参考:

  • 第七次人口普查数据分析可视化: https://www.heywhale.com/mw/project/659bb732f4a4c0307bf9bf94
  • Python爬虫+数据分析可视化中国影院票房:https://www.heywhale.com/mw/project/65758b6535cd36646b388824
  • 蜜雪冰城全国门店数据分布:https://www.heywhale.com/mw/project/65911eb9ced1f8ff72f129c5
  • 基于pycharts对北上广深天气数据进行可视化分析: https://www.heywhale.com/mw/project/64d359f13af70a72062d57f9

1.梳理今天学的 函数内容和爬虫内容

练习1:豆瓣Top250爬虫

  • 打印书的基本信息(book_info)

  • 给图片加上书的排名

练习2:爬取彼岸图网图片

  • 入口网址:https://pic.netbian.com/
  • 将图片保存到本地
  • 用xpath、bs、re选择一种即可(也可以全部试一试)
  • 代码:1-ex.get_pic.py

作业:注册腾讯云服务,完成实名认证

https://console.cloud.tencent.com/

  • 注册腾讯云服务
  • 完成实名认证
  • 开通服务

https://console.cloud.tencent.com/cos

1.创建存储桶

2.配置 设置CORS 规则

3.创建API密钥

保存好密钥:

SecretId:AKIDIUZRAwb4Jb3TnT7qRq0wlLhpiPt9JI3o
SecretKey:mU6eH4qgXbWIzWuMupaCqP3TeaQLAqgN

官方文档

https://cloud.tencent.com/document/product/436

https://cloud.tencent.com/document/product/436/65820

 
 
 

封装的模块:

1.getfile

 

封装的模块:

2.tencent_cos.py

 
 

两种使用方法

 

调用模块,模块会继承主函数的logging 配置

 
我的两个问题

最后的那个csv

还有写日志的,写哪些参数进去作为提示 ok

xpath 爬取top250 未完成 对照视频 3.17最后

 

天气数据爬虫

8-15日 http://www.weather.com.cn/weather15d/101250101.shtml

7日 http://www.weather.com.cn/weather/101250101.shtml

配置mariadb

1.关闭防火墙 systemctl stop firewalld systemctl disable firewalld

2.安装数据库 yum install -y mariadb-server 由于mysql 将来要收费

3.查看当前启动的端口 3306

 

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1223/master
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1842/mysqld

  1. 开机启动 systemctl enable mariadb

    ​ systemctl start mariadb

5.初始化 mysql_secure_installation

  1. 登录 mysql mysql -uroot -p

  2. use mysql

  3. 给root 用户用123456密码,访问数据库里面的任何表的权限

 

9.create database mytest default character set utf8;

  1. use mytest;

mariadb连接pycharm基础操作

 

commit 细节

使用多个commit

1.便于回滚 但是写的太多麻烦

2.如果只在最后加commit

当程序出错了,整个都会停止执行,不对数据库进行任何修改 (没执行到commit)

3.能不能把出错前的哪些代码进行正常提交呢?

​ 使用异常处理:在处理异常时 加上commit 语句 注意错误 后面的代码不会执行

 
 
 
 
 
 
 

sql = “UPDATE app SET name='%s’WHERE id=%s”
sql = sql % (“费瑞曦”,1)

 

except ZeroDivisionError as ex:
print(ex)
print(“这是一个非0的错误”)
except Exception as ex:
#处理异常
print(ex)
db.commit() # 提交
db.close()

“”"
except 可以又多个分支
捕获异常的时候,要将子类写在前面
except 匹配过程从前到后

try:
可能出错的代码段
except NameError as ex:
pass
except TypeError as ex:
pass

except Exception as ex:
处理代码

“”"

 

#coding:utf8
#!/usr/bin/env python
#@FileName :12.sqlalchemy.py
@Time :2024/3/31 15:53
#@Author :huya

#sqlalchemy基于pymysql 工具包,支持对象关系映射(ORM)
pip install sqlalchemy
pip install pymysql

from sqlalchemy import create_engine,text

#pymysql.connect(参数…)
USER = “root”
PASSWD = “123456”
HOST = “192.168.253.129”
POST = “3306”
DBNAME = “mytest”
DB_URL = f"mysql+pymysql://{USER}:{PASSWD}@{HOST}:{POST}/{DBNAME}?charset=utf8"

engine = create_engine(DB_URL)

con = engine.connect()

#con => pymysql 游标 cur

sql = text(“DROP TABLE IF EXISTS app2”)
con.execute(sql)

sql = “”“create table app2 (
id int not null,
name char(20)
)”“”
con.execute(text(sql))

sql = text(“INSERT INTO app2(id,name) VALUES(1,‘huya’)”)
con.execute(sql)

sql = text(“INSERT INTO app2(id,name) VALUES(1,‘huya’),(2,‘zhujunxue’),(3,‘gaohui’),(4,‘feiruixi’)”)
con.execute(sql)

sql = “INSERT INTO app2(id,name) VALUES(:id,:name)”
con.execute(text(sql),{“id”:5,“name”:“李昊阳”})
con.commit()

#sql = ‘INSERT INTO app2(id,name) VALUES(%s,%s)’
datas = [{“id”:3, “name”:“zhujunxue”}, {“id”:4,“name”: “高辉”}]
con.execute(text(sql),datas)
con.commit() # 提交事务

sql = “select * from app2”
result = con.execute(text(sql))
print(“result1”,result.fetchone())
print(“result1”,result.fetchmany(2))
print(“result1”,result.fetchall())

sql = “update app2 set name=‘胡亚’ WHERE name=‘huya’”
con.execute(text(sql))
con.commit()

#更新数据
#sql = “UPDATE app2 SET name='%s’WHERE id=%s”
#sql = sql % (“费瑞曦”,1)
#con.commit()
con.close()

#更新数据
name = “费瑞曦”
id = 3
sql = f"UPDATE app2 SET name=‘{name}’ WHERE id={id}"
con.commit()
con.close()

sql = “DELETE FROM app2 WHERE id=4”
con.execute(text(sql))
con.commit() # 提交
con.close()

 

最新文章