python: Playwright爬虫神器,从此不用写代码喽

听闻微软出了一款自动化测试工具Playwright,功能类似Selenium,Pyppeteer。又听闻它可以自动生成代码……

从此不写代码了

二话不说,先安装。

pdm init #搞个虚拟环境先  
pdm add playwright   
pdm run playwright install #安装浏览器驱动

然后,从此码农翻身的时刻到来了:

pdm run playwright codegen \-o autorun.py 

左边是浏览器,右边是同步生成的代码。

生成的代码:

好家伙!直呼好家伙!本文结束,完结撒花。

抓取微信文章保存为markdown

还是干点实际的事情吧。

例如用来保存微信公众号文章,输出成markdown。

获取页面内容
def get_html_content(html_url,html_filename,step):
   '''
  获取html页面的内容,相当于ctrl+s
  :param html_url: 抓取的url链接
  :param html_filename: 输出的html文件名
  :param step: 调整页面滚动速度,默认为500
  '''
   with sync_playwright() as p:
       browser = p.chromium.launch(headless=False)
       page = browser.new_page()
       page.goto(html_url)
       page.wait_for_load_state('networkidle')  #等待网络加载完毕再进行操作
       html = page.content()
       with open(html_filename,'w',encoding='utf-8') as f:
           f.write(html)
       browser.close()
处理懒加载图片

经过上一步,发现一个bug,保存的html文件里没有把懒加载的图片给保存下来。

查看官方文档无果,只好添加一段javascript手动执行滚动页面。

# get_html_content.py
def get_html_content(html_url,html_filename,step):
   '''
  获取html页面的内容,相当于ctrl+s

  :param html_url: 抓取的url链接
  :param html_filename: 输出的html文件名
  :param step: 调整页面滚动速度,默认为500
  '''
   with sync_playwright() as p:
       browser = p.chromium.launch(headless=False)
       page = browser.new_page()
       page.set_default_timeout(50000)
       page.goto(html_url)
       page.wait_for_load_state('networkidle')
       #设置滚动坐标初始位置
       start_position = 0  
       #获取整个页面内容高度
       scroll_Height = page.evaluate('window.document.body.scrollHeight')
       while(start_position<scroll_Height):
           #不断增加坐标
           start_position = start_position+step
           position = str(start_position)
           #构造javascript
           run_scroll = 'window.scrollTo(0,'+position+')'
           #执行滚动
           page.evaluate(run_scroll)
           #防止滚动太快
           page.wait_for_timeout(1000)
       html = page.content()
       with open(html_filename,'w',encoding='utf-8') as f:
           f.write(html)
       browser.close()
加上html转markdown功能
# html_to_markdown.py

import html2text as ht
def to_markdown(html_filename,markdown_filename):
   '''
  输入html文件生成markdown文件

  :param html_filename: 输入的html文件名
  :param markdown_filename: 输出的markdown文件名
  '''
   text_maker = ht.HTML2Text()
   with open(html_filename,'r',encoding='utf-8') as f:
       htmlpage = f.read()
   text = text_maker.handle(htmlpage)
   with open(markdown_filename,'w',encoding='utf8') as f:
       f.write(text)

弄得像样一点

总不能每次抓取就修改源码,于是直接用argparse包增加命令行参数。

if __name__ == '__main__':
   sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
   parser = argparse.ArgumentParser()
   #PS:输入的url如果含有'&'符号,整个url需要用引号''括起来,否则就会和bash中的&后台命令造成冲突。
   parser.add_argument('url',type=str,help='target url')
   parser.add_argument('-l','--html',type=str,default='output.html',help='filename of html')
   parser.add_argument('-m','--markdown',type=str,default='output.markdown',help='filename of markdown')
   parser.add_argument('-s','--step',type=int,default=500,help='step of scroll every second')
   args=parser.parse_args()
   print(args.url)
   get_html_content(html_url=args.url,html_filename=args.html,step=args.step)
   to_markdown(args.html,args.markdown)
   print('Done!')

大功告成

运行看看效果:

运行过程:

保存的markdown:

勉强能用……

Playwright官方文档:https://playwright.dev/python/docs/intro

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值