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
幂数运算符 + - * / % ** // #**幂运算 #// 地板除 向下取最接近除数的整数
如何学习模块?
爬虫核心:
爬取网页:
解析数据:
存储数据:
分析数据:
难点:爬虫和反爬虫之间的博弈;
爬虫会加大系统负载:并发(每秒访问的人数100) 爬虫1000
什么是反爬虫?
阻止非正常用户来访问我的系统
登录站点:==》获取验证码(图片,手机)
刷新太快请稍后重试
1.robots 协议(www.baidu.com/rebots.txt)
约束性: Robots 协议是建议但并非约束性,网络爬虫可以不遵守,但存在法律风险
作用:网站告知爬虫哪些页面就可以爬取,哪些不能爬取
2.检查User-Agent
·User Agent中文名为用户代理,简称UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及
版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
。网站可以通过检查该字段判断是否为浏览器
解决方法:
。可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用。
如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,后台管理员可以编写IP限制,不让该IP继续访问。
。1s钟内10次 =>把ip放入黑名单,禁止在1h(5min)内访问
o nginx/other…
。解决方法:
。比较成熟的方式是:IP代理池
。降低访问频率(time.sleep(2))
4.session 访问限制
后台统计登录用户的操作,比如短时间的点击事件,请求数据事件,与正常值比对,用于区分用户是否处理异常状态,如果是,则限制登录用户操作权限。
·解决方法:
。注册多个账号、模拟正常操作。
验证码
验证码是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式
解决方法:
。接入第三方验证码平台,实时破解网站的验证码
数据动态加载
python的requests库只能爬取静态页面,爬取不了动态加载的页面。使用!S加载数据方式,能提高爬虫门槛。
。解决方法:
。抓包获取数据url
oselenium 驱动真实的浏览器发送请求
数据加密-使用加密算法
前端加密 通过对查询参数、user-agent、验证码、cookie等前端数据进行加密生成一串加密指令,将加密指令作为参数,再进行服务器数据请求。该加密参数为空或者错误,服务器都不对请求进行响应。
·解决方法
。JS加密破解方式,就是要找到S的加密代码进行破解。
注册:https://www.heywhale.com/
思考:想一个自己想爬取的网站(有比较多的数据,抓取的数据分析一些什么内容,可视化)
参考:
1.梳理今天学的 函数内容和爬虫内容
打印书的基本信息(book_info)
给图片加上书的排名
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
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
开机启动 systemctl enable mariadb
systemctl start mariadb
5.初始化 mysql_secure_installation
登录 mysql mysql -uroot -p
use mysql
给root 用户用123456密码,访问数据库里面的任何表的权限
9.create database mytest default character set utf8;
使用多个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()
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.bhha.com.cn/news/1737.html