python爬虫之pyppeteer的合理使用

1.背景使用

    因为工作原因的原因去爬取部分政府网站的公开数据,因为政府网站的反爬一直以来是属于比较难的,比如今天就遇到一个比较*蛋的网站:

此网站定眼一看是个post请求,常规方法加上data去请求一般就可以处理了

但是让人头疼的一点是它的下一页不在post的data内,这样的话常规请求只能请求一页就很麻烦了。就没法获取所有的数据了。一般这样的网站使用常规手段就没法用了,所以在这里告诉各位朋友一个非常搞笑的东西——pyppeteer!!!

2.正文

pyppeteer 是一款类似selenium的自动化测试的工具,其是根据puppeteer衍生而来的。因为这个东西很久没有维护了 所以会存在很多的bug。关于pyppeteer的如何安装等等,在这里就不多做介绍了,因为网上有很多大佬对其进行了详细的说明。这里说它的主要目的是为了针对这种特定的网站。

因为pyppeteer使用的浏览器内核是chromium,所以我们需要提前下载该浏览器内核,并进行环境变量的配置。这些都是很容易的操作了。下面说正题。

对于博主遇到的这个网站,它的下一页点击是这个鬼样子的:

这种就很麻烦了,一般好像需要去搞js好像,但是我一直没去弄过 感觉非常的麻烦,那怎么用pyppeteer去处理呢(我感觉自己废话太多 hhhhhhh....)

直接的把代码贴上来,然后一步一步的去解释。

首先前7行都是对包的引用,这里就不做多的解释了。

第十行是对要进行抓取的url进行声明,

第十一行是对pyppeteer的声明,类似seleniume中对浏览器内核的声明,这里有许多的参数,这个想要了解的可以去查看文档哈

这里主要介绍第十三行的page.on()这个方法,page.om类似于对浏览器发送与接收的请求进行拦截,对发送的是request,接收则是response。如果拦截到就会调用自己定义的函数,这里是response_handler,

比如这个函数就可以判断接收的响应内是否存在xhr格式的文件,如果存在就进行下一步的处理,这里涉及到网站进行翻页,可以根据第19行来,page.evaluate()参数就是网页源码的那个js点击下一页的参数。再放到for循环内进行循环,循环多少次就可以点击多少页了,然后我们进行page.content()该参数是打印网页的内容,而不仅仅是源码。然后我们可以通过获得的内容进行数据的抓取,大致就是这样吧,其实说的不详细。

3.结尾

因为现在很多的网站对selenium可以检测出来,所以现在selenium+chrome使用率就非常低了。但是pyppeteer的成功率还是相当高的!

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用pyppeteer进行爬虫的问题,我可以给您一些基本信息和指导。 Pyppeteer是一个用于控制Headless Chrome浏览器的Python库,它基于Google的pychrome项目。它允许您使用Python代码自动化与网页进行交互,模拟用户操作,执行JavaScript代码,并提取所需的数据。 以下是使用pyppeteer进行爬虫的基本流程: 1. 安装依赖:使用pip安装pyppeteer库和其他必要的依赖项。 ``` pip install pyppeteer ``` 2. 创建和配置浏览器实例:使用pyppeteer.launch()方法创建一个浏览器实例,并使用一些选项配置它。 ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') # 执行其他操作... asyncio.get_event_loop().run_until_complete(main()) ``` 3. 进行交互和数据提取:使用page对象与网页进行交互,例如点击按钮、填写表单、执行JavaScript等。您可以使用page.evaluate()方法来获取网页上的数据。 ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') title = await page.evaluate('document.title') print(title) # 执行其他操作... asyncio.get_event_loop().run_until_complete(main()) ``` 4. 关闭浏览器实例:使用browser.close()方法关闭浏览器实例,释放资源。 ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') # 执行其他操作... await browser.close() asyncio.get_event_loop().run_until_complete(main()) ``` 这只是一个基本示例,您可以根据您的具体需求进一步探索和使用pyppeteer。如果您需要更多的帮助或有其他问题,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值