Pyppeteer 的方法介绍
1.launch介绍
# 新建浏览器对象需要导入两个包, Pyppeteer 是基于 Python 的新特性 async 实现的
import asyncio
from pyppeteer import launch
# 首先新建一个协程方法
async def 方法名():
browser = await launch() # 创建一个Browser对象
"""
不新建页面使用浏览器打开的页面
"""
pages = await browser.pages()
page = pages[0]
# 规定打开页面内容的大小
await page.setViewport({"width": width, "height": height})
# 使用goto方法请求打开页面链接
await page.goto('https://www.1234567.com.cn/')
# 暂停100秒,简单的介绍下,复制记得去除掉
await asyncio.sleep(100)
html = await page.content() # 获取请求的页面内容
# 拿到了页面内容,现在只需要进行解析就可以了
return html
"""
使用asyncio下的getget_event_loop().run_until_complete(建立的方法名)来执行
"""
asyncio.get_event_loop().run_until_complete(main())
2.launch的参数介绍
"""
参数:
headless:[True 不打开浏览器, False 打开浏览器]
设置浏览器大小
"args": [f'--window-size={width},{height}']
关闭提示条:”Chrome 正受到自动测试软件的控制”
"args":[’–disable-infobars’]
可执行文件的路径,如果指定之后就不需要使用默认的 Chromium 了,可以指定为已有的 Chrome 或 Chromium。
"executablePath": r"文件路径\chrome.exe"
ignoreHTTPSErrors (bool): 是否要忽略 HTTPS 的错误,默认是 False。
headless (bool): 是否启用 Headless 模式,即无界面模式,如果 devtools 这个参数是 True 的话,那么该参数就会被设置为 False,否则为 True,即默认是开启无界面模式的。
executablePath (str): 可执行文件的路径,如果指定之后就不需要使用默认的 Chromium 了,可以指定为已有的 Chrome 或 Chromium。
args (List[str]): 在执行过程中可以传入的额外参数。
devtools (bool): 是否为每一个页面自动开启调试工具,默认是 False。如果这个参数设置为 True,那么 headless 参数就会无效,会被强制设置为 False
"""
# 如下例:
async def main():
width, height = 1200, 960
start_parm = {
"executablePath": r"D:\Python37\pyppeteer\pyppeteer\local-chromium\588429\chrome-win32\chrome.exe",
# 关闭无头浏览器
"headless": False,
"args": [f'--window-size={width},{height}', '–disable-infobars'],
# "devtools": True,
}
browser = await launch(start_parm)
# 也可以
browser = await launch(**start_parm)
pages = await browser.pages()
page = pages[0]
# 规定打开页面内容的大小
await page.setViewport({"width": width, "height": height})
# 使用goto方法请求打开页面链接
await page.goto('https://www.1234567.com.cn/')
# 暂停100秒,简单的介绍下,复制记得去除掉
await asyncio.sleep(100)
html = await page.content() # 获取请求的页面内容
# 拿到了页面内容,现在只需要进行解析就可以了
return html
asyncio.get_event_loop().run_until_complete(main())
3.解析数据
"""
以上的方法返回了页面内容,现在要做的是解析页面并获取需要的内容,
简单介绍对应的方式
"""
# 第一种
from bs4 import BeautifulSoup
# 定义的协程方法名:返回的是页面内容
soup = BeautifulSoup(定义的协程方法名. "html5lib")
# 或者使用
soup = BeautifulSoup(定义的协程方法名. "lxml")
# 这个库下查找元素的方法有
"""
传入标签:例如-div,a等等
传入对应的id,name,calss等等:例如-{"class":"名称"}、{"id":"名称"}、{"name":"名称"}等等
"""
# 单个查找方法
element=soup.find()
# N个查找方法
elements=soup.fina_all()
# 单个的属性获取直接.就行,多个需要迭代
#例如
#单个
element.get() # 获取属性,图片的src等等
element.text # 获取这个标签的文本
#多个
for element in elements:
element.get() # 获取属性,图片的src等等
element.text # 获取这个标签的文本
"""
以上是BeautifulSoup下的几种方法,现在介绍etree
# 将html文件进行读取
html = etree.parse('1.html')
# 将html内容序列化
result = etree.tostring(html).decode('utf-8')
"""
from lxml import etree
# 调用 etree 模块的 HTML() 方法来创建 HTML 解析对象
html = etree.HTML(定义的协程方法名)
html.xpath("//标签[@class='定义的对象']")
"""
xpath表达式,来找寻指定的内容,提取文本使用text(),这里获取的是获取所有a标签下的文本
建立etree.HTML()对象后无法直接使用对象点出方法,手敲.xpath()
"""
xpath_bds='//a/text()'
# 提取文本数据,以列表形式输出
r_list=parse_html.xpath(xpath_bds)
# 具体可参考 https://blog.csdn.net/m0_63794226/article/details/126377840?spm=1001.2014.3001.5502
总结:
部分内容模糊,再次学习加深了理解。