分享个pyppeteer 通用爬虫

突然发现自己之前写过的代码
虽然现在爬虫都逆向了,但是有时候获取个一次性数据,或者不需要维护的时候 pyppeteer  还是非常好用的。
因为pyppeteer 是puppeteer的python 版本  所以不是特别火 网上资料也非常少
.简单记录一下

如果想详细了解
https://zhaoqize.github.io/puppeteer-api-zh_CN/
去看看官网

这边分析一个可以爬取几乎任何网站的一组python代码 写的比较粗糙。
去年八月份写的 也没做什么处理

 本人发这个网站提供参考,如有其他 不关我事。
示例网站 也不要一直爬取,会给别人带来困扰。

# -*- coding: utf-8 -*-
# home.php?mod=space&uid=238618    : 2022/8/19 13:17
# home.php?mod=space&uid=686208  : lzc
# home.php?mod=space&uid=621973   : hybpjx@163.com
# home.php?mod=space&uid=267492    : __init__.py
# @Software: PyCharmimport asyncio
from pyppeteer import launchfrom collections import namedtupledef screen_size():"""使用tkinter获取屏幕大小"""# 导入gui编程的模块import tkinter# 创建一个空间界面tk = tkinter.Tk()# 获得宽高width = tk.winfo_screenwidth()height = tk.winfo_screenheight()tk.quit()# 得到返回值return width, heightasync def main():# 默认无头浏览器  沙盒模式browser = await launch({'headless': False, 'args': ['--no-sandbox'], })# 新开一个page对象page = await browser.newPage()# 拿到一个尺寸 作为你的谷歌浏览器大小width, height = screen_size()# 也可以自定义await page.setViewport(viewport={"width": width, "height": height})# 开启jsawait page.setJavaScriptEnabled(enabled=True)# 设置请求头await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299')# 开启 隐藏 是selenium 让网站检测不到await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')# 访问urlawait page.goto(website.url)now_page = 0while True:now_page += 1# 滑动js  动态加载await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')# 优雅的等待1秒 不会造成 资源阻塞await asyncio.sleep(1)# xpathli_list = await page.querySelectorAll(website.list_query)# 可将返回值返回到列表中 可省略# item_list = []for li in li_list:# 防止有些网站 第一条数据获取不到 第二条数据获取的到 故加个trytry:# 找寻下面所有的a标签 详情页链接地址title_obj = await li.querySelector("a ")# 找到 其 链接地址和链接标题title_url = await page.evaluate('(element) => element.href', title_obj)title_name = await page.evaluate('(element) => element.textContent', title_obj)# 由于网站的时间 千奇百怪 有的在td 有的在p 有的在div  所有还是不要写死了date_obj = await li.querySelector(website.title_date_query)title_date = await page.evaluate('(element) => element.textContent', date_obj)# 开一个新的对象detail_page = await browser.newPage()# 访问详情页await detail_page.goto(url=str(title_url))# 拿到源码await detail_page.content()# 拿到 详情页的selector 对象element = await detail_page.querySelector(website.content_query)# 拿到详情页content_html = await detail_page.evaluate('(element) => element.outerHTML', element)print(title_url, title_name, title_date, len(content_html))await detail_page.close()except Exception as e:print(e)print(f"第{now_page}页访问>>>>>")# 点击下一页next_page_link = website.next_page_queryif next_page_link:await page.click(next_page_link)else:raise Exception("already Crawl complete Exit coming soon....")await asyncio.sleep(2)# return item_listasync def page_close(browser):for _page in await browser.pages():await _page.close()await browser.close()if __name__ == '__main__':Websites = namedtuple('websites', ['url', 'list_query', 'title_date_query', 'content_query', 'next_page_query'])websites = [('http://www.cqzbtb.cn/_jiaoyixinxi/','.listbox ul','.ys','.article-wrap',"body > section > div > div.list-wrap.row > div.listpa > ul > li:nth-child(7)"),]for i in websites:website = Websites._make(i)a = main()loop = asyncio.get_event_loop()results = loop.run_until_complete(asyncio.gather(a))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/148788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某大型房地产公司绩效面谈项目成功案例纪实

——开展有效的绩效面谈,促进和完善管理工作 【客户行业】房地产行业;国有企业 【问题类型】绩效面谈改进 【客户背景】 某大型房地产公司是某国企集团的省级分公司,集团公司现拥有北京、上海、广州、山东等8大区域公司,现有员…

每天一道算法题(六)——返回一组数字中所有和为 0 且不重复的三元组

文章目录 前言1、问题2、示例3、解决方法4、效果5、注意点 前言 注意:答案中不可以包含重复的三元组。 1、问题 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] n…

WMS仓库管理系统库位分配规划

分配说明 每个商品必须至少有一个分拣位(整箱或拆零均可)如果只设了拆零分拣位,则入库不分配存储位,只上拆零分拣位,对于DPS分拣商品是一品固定一个货位,对于RF分拣商品是动态分配货位,一个商品…

记录我常用的免费API接口

目录 1.随机中英文句子 2.随机中英文句子(带图片和音频) 3.随机一句诗 4.随机一句话 5.随机一句情话 6. 随机一句舔狗语录 7.历史上的今天 8.获取来访者ip地址 9:获取手机号信息 10. 垃圾分类查询 11.字典查询 12.QQ信息查询 1.随…

golang学习笔记——条件表达式

文章目录 条件表达式if 语句的语法复合 if 语句 条件表达式 在任何编程语言中,最基本的控制流都是 if/else 语句。 在 Go 中,if/else 语句非常简单。 但是,你需要先了解一些差异,然后才能得心应手地编写 Go 程序。 让我们看看 i…

JAVA Web应用常见漏洞与修复建议

背景: 在工作中,我们的交付团队在交付项目时,可能会遇到甲方会使用一些第三方工具(奇安信等)对项目代码进行扫描,特别是一些对安全性要求比较高的企业,比如涉及到一些证券公司、银行、金融等。他…

【网络学习笔记】

记录一下关于域名,dns,反向代理知识的一些内容 通过阿里云函数进行反向代理 阿里云函数计算fanxiangdaili 逻辑 和cloudflare的workers的差不多(前几天突然不能用了,使用魔法还能用,不过今天又莫名其妙恢复了&#xf…

基础组件-流量回放(全链路流量回放预研)

一、调研 日常测试工作中,遇到问题如下: 1、服务架构升级或者重构,需要对原有的接口做全量回归 2、对于业务逻辑复杂的场景,每个迭代版本都需要大量的时间进行回归测试 3、编写自动化用例时复杂场景造数麻烦,日常自动…

Mybatis-Plus《学习笔记 22版尚硅谷 》——感谢【尚硅谷】官方文档

Mybatis-Plus《学习笔记 22版尚硅谷 》 一、MyBatis-Plus1.简介2.特性3.支持数据库4.框架结构5.官方地址 二、入门案例1.开发环境2.建库建表3.创建工程4.配置编码5.测试查询 三、增删改查1.BaseMapper<T>2.调用Mapper层实现CRUD2.1 插入2.2 删除a、根据ID删除数据b、根据…

单元测试实战(三)JPA 的测试

为鼓励单元测试&#xff0c;特分门别类示例各种组件的测试代码并进行解说&#xff0c;供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战&#xff08;一&#xff09;Controller 的测试 单元测试实战&#xff08;二&#xff09;Service 的测试 单元测试实战&am…

Node.js之TCP(net)

Hi I’m Shendi Node.js之TCP&#xff08;net&#xff09; 最近使用Nodejs编写程序&#xff0c;需要用到自己编写的分布式工具&#xff0c;于是需要将Java版的用NodeJs重新写一遍&#xff0c;需要使用到TCP通信&#xff0c;于是在这里记录下Node.js TCP 的使用方法 依赖 需要使…

【Python进阶】近200页md文档14大体系知识点,第4篇:linux命令和vim使用

本文从14大模块展示了python高级用的应用。分别有Linux命令&#xff0c;多任务编程、网络编程、Http协议和静态Web编程、htmlcss、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。 全套Python进阶笔记地址…

黑马程序员 计算机网络(笔记)

参考文章&#xff1a;【黑马程序员】计算机网络概述~ 程序员必须掌握的入门基础知识&#xff01; 参考文章&#xff1a;黑马程序员Linux运维工作场景解决方案零基础到就业 参考文章&#xff1a;网络安全运维进阶教程&#xff0c;运维工程师深度学习教程 文章目录 linux入门到…

455. 分发饼干 --力扣 --JAVA

题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个尺寸 …

Jenkinsfile+Dockerfile前端vue自动化部署

前言 本篇主要介绍如何自动化部署前端vue项目 其中&#xff0c;有两种方案&#xff1a; 第一种是利用nginx进行静态资源转发&#xff1b;第二种方案是利用nodejs进行启动访问&#xff1b; 各个组件版本如下&#xff1a; Docker 最新版本&#xff1b;Jenkins 2.387.3nginx …

【华为OD机试高分必刷题目】洗衣服(JavaPythonC++贪心算法实现)

🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,每篇都用了Java&Python&C++分别解题,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试高分必刷题目】洗衣服(Java&Python&C++贪心算法实现)题目描述解题思路Py…

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍模数芯片ADC0809介绍通过模数芯片ADC0809把电压模…

Flutter笔记:拖拽手势

Flutter笔记 拖拽手势 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134485123 目 录 1. 概述2. 垂直拖…

Adobe Illustrator——原创设计的宝藏软件

今天&#xff0c;我们来谈谈一款在Adobe系列中曾经多次给大家都提到的原创性极强的设计理念丰富的矢量图形编辑软件——Adobe Illustrator。 Adobe Illustrator&#xff0c;其定位是一款与Photoshop相类似对矢量图形进行编辑的软件。 Adobe Illustrator&#xff0c;作为全球最著…

whisper large-v3 模型文件下载链接

#源码里找到的_MODELS {"tiny.en": "https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt","tiny": "https://openaipublic.azureedge.net/main/whisp…