模拟登录
以网页抖音登录为例:
1.获取cookies
from selenium.webdriver import Chrome
a = Chrome()
a.get('https://www.douyin.com/')
input('拖延时间登录,完成直接回车:')
cook = a.get_cookies()
with open('./file/douyin.txt','w',encoding='utf-8') as f:
f.write(str(cook))
2.使用cookies的txt文件,完成登录
from time import sleep
# 添加cookie完成登录
from selenium.webdriver import Chrome
a = Chrome()
a.get('https://www.douyin.com/')
with open('./file/douyin.txt','r',encoding='utf-8') as f:
cook = eval(f.read())
for i in cook:
a.add_cookie(i)
a.get('https://www.douyin.com/')
sleep(5)
a.close()
# 抖音登录完毕
day22
Lxml是Python基于xpath做数据解析的工具
1.什么xpath:通过提供标签路径来获取标签(xpath指的就是标签的路径)
(1)基本概念
- 树:整个html内容或者整个xmL内容
- 节点:树结构中的每个标签(元素)就是一个节点
- 树节点:树结构中的第一个节点就是根节点(网页对应树的根节点是html标签)
- 节点内容:双标签的标签内容
- 节点属性:标签的标签属性
(2)路径:目标节点在整个树中的位置信息
- 绝对路径:以’/'开头,不管xpath前面的节点是什么,都从根节点写起。
- 相对路径
- 全路径
创建xml文件data.xml:
<supermarket>
<name>永辉超市</name>
<staffs>
<staff>
<name>张三</name>
<position>收营员</position>
<salary>3500</salary>
</staff>
<staff>
<name>小明</name>
<position>收营员</position>
<salary>3800</salary>
</staff>
<staff>
<name>小花</name>
<position>导购</position>
<salary>4500</salary>
</staff>
</staffs>
<goodsList>
<goods>
<name>面包</name>
<price>5.5</price>
<count>12</count>
</goods>
<goods tag="hot">
<name>泡面</name>
<price>3.5</price>
<count>59</count>
</goods>
<goods tag="discount">
<name>火腿肠</name>
<price>1.5</price>
<count>30</count>
</goods>
<goods tag="hot">
<name>矿泉水</name>
<price>2</price>
<count>210</count>
</goods>
</goodsList>
</supermarket>
创建树:
with open('data.xml','r',encoding='utf-8') as f:
trees = f.read()
# print(trees)
tree = etree.XML(trees)
使用绝对路径获取物品的价格
goods_price0 = tree.xpath('/supermarket/goodsList/goods/price')
goods_price1 = tree.xpath('/supermarket/goodsList/goods/price/text()')
print([price.text for price in goods_price0]) #['5.5', '3.5', '1.5', '2']
print(goods_price1) #['5.5', '3.5', '1.5', '2']
使用相对路径获取员工姓名,
相对路径中./可以省略
staffname = tree.xpath('./staffs/staff/name/text()')
print(staffname)#['张三', '小明', '小花']
#方法2
staff = tree.xpath('/supermarket/staffs')
staffname1 = staff[0].xpath('./staff/name/text()')
print(staffname1)#['张三', '小明', '小花']
//路径:从全局任意节点查找
name1 = tree.xpath('name/text()')
print(name1)#['永辉超市']
name2 = tree.xpath('//name/text()')
print(name2)#['永辉超市', '张三', '小明', '小花', '面包', '泡面', '火腿肠', '矿泉水']
2.xml数据格式
xmL和json都是通用的数据,可以用于不同编程语言的程序之间进行数据交流
json:更小更快,xml:更安全
<supermarket>
<name>永辉超市</name>
<address>肖家河大厦</address>
<goodsList>
<goods name="泡面" price="3.5" count="20"></goods>
<goods name="矿泉水" price="2" count="50"></goods>
<goods name="面包" price="5" count="15"></goods>
</goodsList>
<worker_list>
<cashier name="张三" pay="4000"></cashier>
<shoppingGuide name="李四" pay="3500"></shoppingGuide>
</worker_list>
<goods price="50" count="15">
<name>烟</name>
</goods>
</supermarket>
3.xpath的谓语(条件)
1)和位置相关条件
name = tree.xpath('//staffs/staff[2]/name/text()')
print(name)#['小明']
获取最后一个员工
name = tree.xpath('//staffs/staff[last()]/name/text()')
print(name)#['小花']
获取倒数第二个员工
name = tree.xpath('//staffs/staff[last()-1]/name/text()')
print(name)#['小明']
获取位置大于1的所有员工名字
name = tree.xpath('//staffs/staff[position()>1]/name/text()')
print(name)#['小明', '小花']
2)和属性相关条件
@属性名 = 值:获取指定属性为指定值的标签
取带有tag属性对应的商品名称
goods = tree.xpath('//goodsList/goods[@tag="hot"]/name/text()')
print(goods)#['泡面', '矿泉水']
3)和子标签内容相关条件
[子标签 = 值] : 获取指定子标签的标签内容为指定值的标签
[子标签名>值] :获取指定子标签的标签内容大于指定值的标签
案例:获取物品价格>3的物品名称
goods = tree.xpath('//goodsList/goods[price>3]/name/text()')
print(goods)# ['面包', '泡面']
案例:获取物品价格>3的物品名称
goods = tree.xpath('//goodsList/goods[count>50]/name/text()')
print(goods)# ['泡面', '矿泉水']
4.获取标签内容和标签属性
获取标签内容:获取标签的路径/text():获取路径选中的所有的标签的标签内容
获取标签内容:获取标签的路径/@属性:获取路径选中的所有的标签的指定属性的值
案例:获取goods的tag属性的值
goods = tree.xpath('//goodsList/goods/@tag')
print(goods)#['hot', 'discount', 'hot']
5.通配符*
在xpath路径中可以用*号来代替任何标签任何属性
案例:获取任何name的内容
result = tree.xpath('//*/name/text()')
print(result)
# ['永辉超市', '张三', '小明', '小花', '面包', '泡面', '火腿肠', '矿泉水']
案例:获取goods下的所有标签内容
result = tree.xpath('//goods/*/text()')
print(result)
# ['面包', '5.5', '12', '泡面', '3.5', '59', '火腿肠', '1.5', '30', '矿泉水', '2', '210']
6.若干分支(|)
使用|如果二者都存在,则都取出来
re = tree.xpath('//goods[1]/name/text()|//goods[2]/name/text()')
print(re)#['面包', '泡面']
执行Python程序的指令
前提:电脑装了python环境,python py 文件路径
常见的指令操作
执行指令的工具: Windows - 命令提示符(cmd) 、Mac - 终端
- 运行python程序: - 运算程序的计算机必须先安装python环境
win: python py文件路径
mac: python3 py文件路径
注意:windows使用python指令执行Python程序的时候必须保证写指令的位置和py文件在同一个盘下面;
如果不在同一个盘,执行指令前先切盘
- 进入文件夹: cd
cd 文件夹相对路径、文件夹绝对路径
注意:如果是windows操作系统,cd操作如果要跨盘需要先切盘,然后再cd
切盘方法:C:、E:、D:
-
查看当前文件夹的内容
win: dir
Mac:ls -
用指令创建虚拟环境
第一步:找到一个用来放虚拟环境的文件夹
第二步:通过cd指令进入到存放虚拟环境的文件夹中第三步:创建虚拟环境
python -m venv 虚拟环境名
python3 -m venv 虚拟环境名第四步:激活虚拟环境
(mac) source 虚拟环境目录/bin/activate
(windows) 虚拟环境目录\ Scripts\activate.bat
第五步:退出虚拟环境(回到系统环境)
deactivate
-
常用pip指令(pip - Python包管理工具)
pip list - 查看当前环境已经安装过的所有的第三方库
pip install 第三方库名称 - 下载并且安装指定的第三方库
pip install 第三方库名称 -i 镜像地址 - 在指定的镜像地址中下载安装
pip install 第三方库名称==版本号 -i 镜像地址
pip install 第三方库名称1 第三方库名称2
pip freeze > 依赖文件名 - 生成依赖文件
pip install -r 依赖文件路径 - 批量安装
pip uninstall 第三方库名称 - 卸载指定的第三方库