playwright教程 (一)适合小白
一、playwright简介
playwright是微软发布的一款自动化测试工具,可以自动生成代码
在学习playwright前可以了解playwright文档,目前只有英文版!
1.playwright简介
pip install --upgrade pip
pip install playwright
playwright install
2.基本使用
import xlwt
# 导入sync_playwright方法
from playwright.sync_api import sync_playwright
# 定义run()方法
def run(playwright):
# 调用playwright的chromium创建浏览器实例,脚本运行需要首先打开浏览器实例
# 如果不设置为 False,默认是无头模式启动浏览器,我们看不到任何窗口
browser = playwright.chromium.launch(headless=False)
# 创建context对象,context运行资源是单独隔离的,可以理解为轻量级的浏览器实例
context = browser.new_context()
# 返回page对象,新建页面
page = context.new_page()
# 加载豆瓣网页面
page.goto("https://movie.douban.com/")
3.独特功能,自动生成(一段即可)
playwright codegen -o baidu.py
-o 后面是代码自动生成后保存的文件名
二、练习豆瓣电影TOP10,并生成Excel表格
1.了解选择器
在playwright中选择器可以使用CSS选择器,xpath选择器,后者也可应用于其他python库
xpath教程可参考菜鸟(东西不多,一些规则,一看就懂)
# 使用CSS选择器选定电影榜单位置
names = page.query_selector_all("#billboard > div.billboard-bd > table > tbody > tr > td > a")
# 使用xpath选择器获取
# names = page.query_selector_all("//*[@id='billboard']/div[2]/table/tbody/tr/td/a")
两个选择器本质是一样的,xpath选择器可以更直观
2.利用选择器在F12开发者根据中找到所需数据位置
选择器选择所需元素范围不要太大(太大的话也可以获取,但就比较麻烦,像获取TOP10数据这种,有规律的,可以选择每个小标签就可以),如上图a标签.,10个a标签,正好对应10条数据。
# 新建列表 用于存储电影名字和链接
listName = []
# 因电影榜单数据都为<tr><td>样式,遍历每一条样式
for name in names :
# 获取a节点中的电影名字
content = name.text_content()
# 获取a节点中的电影链接
link = name.get_attribute("href")
# 将每行字符串追加到列表中
listName.append((content,link))
print(content,link)
print(listName)
接着遍历这10条数据,每一条name就是一个<a>标签,利用
name.text_content() 拿到标签的文本
name.get_attribute("href")拿到标签中href属性的值
可以打印出来试试看,我就不示范了
3.保存到Excel中
再保存前考虑,创建excel,表名,表头,单元格大小
# 创建wordbook对象
workbook = xlwt.Workbook(encoding = 'utf-8')
# 创建工作表
worksheet = workbook.add_sheet('豆瓣电影TOP10')
# 设置工作表的表头,write(行,列,值)
worksheet.write(0, 0, label="豆瓣电影TOP10")
worksheet.write(2, 0, label="名称")
worksheet.write(2, 1, label="链接")
# 设置单元格宽度
worksheet.col(0).width = 4000
worksheet.col(1).width = 10000
将上述的listName遍历,这里采用enumerate方法,可以遍历出索引和数据,通过索引控制excel中的行和列更方便
for i,items in enumerate(listName):
# print(i,items)
# 将获取到的items写入excel中 write(行,列,值)
worksheet.write(i+3, 0, items[0])
worksheet.write(i+3, 1, items[1])
# 保存工作表
workbook.save('Excel_test.xls')
关闭浏览器,页面,
page.close()
context.close()
browser.close()
#调用sync_playwright方法,返回浏览器上下文管理器,赋值为p
with sync_playwright() as playwright:
run(playwright)
三、总结
这里使用的是模拟浏览器获取,代码还是比较初级,主要体验将获取的数据存储excel的过程,后续会更新通过接口获取,获取不同页面的数据等。。。
来源:小白白学爬虫