python爬⾍Pyppeteer使⽤⽅法解析
引⾔
Selenium 在被使⽤的时候有个⿇烦事,就是环境的相关配置,得安装好相关浏览器,⽐如 Chrome、Firefox 等等,然后还要到官⽅⽹站去下载对应的驱动,最重要的还需要安装对应的 Python Selenium 库,确实是不是很⽅便,另外如果要做⼤规模部署的话,环境配置的⼀些问题也是个头疼的事情。那么本节就介绍另⼀个类似的替代品,叫做 Pyppeteer。
Pyppeteer简介
注意,本节讲解的模块叫做 Pyppeteer,不是 Puppeteer。Puppeteer 是 Google 基于 Node.js 开发的⼀个⼯具,有了它我们可以通过 JavaScript 来控制 Chrome 浏览器的⼀些操作,当然也可以⽤作⽹络爬⾍上,其 API 极其完善,功能⾮常强⼤。⽽Pyppeteer ⼜是什么呢?它实际上是 Puppeteer 的 Python 版本的实现,但他不是 Google 开发的,是⼀位来⾃于⽇本的⼯程师依据 Puppeteer 的⼀些功能开发出来的⾮官⽅版本。
在 Pyppetter 中,实际上它背后也是有⼀个类似 Chrome 浏览器的 Chromium 浏览器在执⾏⼀些动作进⾏⽹页渲染,⾸先说下Chrome 浏览器和 Chromium 浏览器的渊源。
Chromium 是⾕歌为了研发 Chrome ⽽启动的项⽬,是完全开源的。⼆者基于相同的源代码构建,Chrome 所有的新功能都会先在 Chromium 上实现,待验证稳定后才会移植,因此 Chromium 的版本更新频率更⾼,也会包含很多新的功能,但作为⼀款独⽴的浏览器,Chromium 的⽤户体要⼩众得多。两款浏览器“同根同源”,它们有着同样的 Logo,但配⾊不同,Chrome 由蓝红绿黄四种颜⾊组成,⽽ Chromium 由不同深度的蓝⾊构成。
Pyppeteer 就是依赖于 Chromium 这个浏览器来运⾏的。那么有了 Pyppeteer 之后,我们就可以免去那些繁琐的环境配置等问题。如果第⼀次运⾏的时候,Chromium 浏览器没有安装,那么程序会帮我们⾃动安装和配置,就免去了繁琐的环境配置等⼯作。另外 Pyppeteer 是基于 Python 的新特性 async 实现的,所以它的⼀些执⾏也⽀持异步操作,效率相对于 Selenium 来说也提⾼了。
环境安装
由于 Pyppeteer 采⽤了 Python 的 async 机制,所以其运⾏要求的 Python 版本为 3.5 及以上
pip install pyppeteer
快速上⼿
import asyncio
from pyppeteer import launch
from lxml import etree
async def main():
browser = await launch()
page = wPage()
('scrape/js/')
page_text = t()
tree = etree.HTML(page_text)
div_list = tree.xpath('//div[@class="quote"]')
print(len(div_list))
await browser.close()
<_event_loop().run_until_complete(main())
结合协程
from pyppeteer import launch
import asyncio
from lxml import etree
# 实例化浏览器对象(⾕歌测试版)
async def main():
bro = await launch()
# 新建⼀个空⽩页chrome浏览器官方
page = wPage()
<('scrape/js/')
# 获取page当前显⽰页⾯的源码数据
page_text = t()
return page_text
def parse(task):
page_text = sult()
tree = etree.HTML(page_text)
div_list = tree.xpath('//div[@class="quote"]')
for div in div_list:
content = div.xpath('./span[1]/text()')
print(content)
c = main()
task = sure_future(c)
task.add_done_callback(parse)
loop = _event_loop()
loop.run_until_complete(c)
解释:
launch ⽅法会新建⼀个 Browser 对象,然后赋值给 browser,然后调⽤ newPage ⽅法相当于浏览器中新建了⼀个选项卡,同时新建了⼀个 Page 对象。然后 Page 对象调⽤了 goto ⽅法就相当于在浏览器中输⼊了这个 URL,浏览器跳转到了对应的页⾯进⾏加载,加载完成之后再调⽤ content ⽅法,返回当前浏览器页⾯的源代码。
然后进⼀步地,我们⽤ pyquery 进⾏同样地解析,就可以得到 JavaScript 渲染的结果了。在这个过程中,我们没有配置Chrome 浏览器,没有配置浏览器驱动,免去了⼀些繁琐的步骤,同样达到了 Selenium 的效果,还实现了异步抓取。
详细⽤法
开启浏览器
调⽤ launch ⽅法即可,相关参数介绍:
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。
关闭提⽰条:”Chrome 正受到⾃动测试软件的控制”,这个提⽰条有点烦,那咋关闭呢?这时候就需要⽤到 args 参数了,禁⽤操作如下:
browser = await launch(headless=False, args=['--disable-infobars'])
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论