首页 > 其他分享 >前端开发爬虫首选puppeteer

前端开发爬虫首选puppeteer

时间:2023-03-13 16:55:14浏览次数:37  
标签:const 爬虫 page nth child puppeteer 前端开发

很多前端同学可能对于爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 python 、php 等。当然这是在 nodejs 前了,nodejs 的出现,使得 Javascript 也可以用来写爬虫了。但这是大数据时代,数据的需求是不分前端还是后端的,既然由于 nodejs 强大的异步特性,让我们可以轻松以异步高并发去爬取网站。

这里会有一个问题吗,那就是前端程序员如果要开发爬虫是使用python还是使用puppeteer呢?如果想快速开发爬虫,还是驱动浏览器的方式比较好,我推荐用puppeteer,纯js环境,上手快,puppeteer直接驱动无头浏览器速度并不算慢。但是现在目标网站爬虫策略多种多样,即使是使用最简单的方式也要学习反爬策略的应对。如果遇到验证码识别等需要深度学习的,可以用python写这部分,然后nodejs和python进程间通信。
这里我们可以使用puppeteer简单的实现下爬虫,就以获取微博热搜为例子进行实践。
`// 引入process和puppeteer模块
const process = require("process");
const puppeteer = require("puppeteer");

// 定义代理地址、延时时间和延时函数
const PROXY = "http://www.16yun.cn:80"; // 代理服务器(产品 www.16yun.cn)可以修改这个代理地址
const SLEEP = 5000; // 你可以修改这个延时时间(毫秒)
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

// 定义一个异步函数view,接受一个URL和一个代理地址作为参数
async function view(url, proxy) {
// 在view函数中,使用puppeteer.launch方法启动一个浏览器实例,并设置一些参数,如headless、ignoreHTTPSErrors、defaultViewport和args
const browser = await puppeteer.launch({
headless: true, // 设置为无头模式(不显示浏览器窗口)
ignoreHTTPSErrors: true, // 忽略HTTPS错误
defaultViewport: { width: 1280, height: 800 }, // 设置默认视口大小
args: [--proxy-server=${proxy}], // 设置代理服务器地址
});

// 使用browser.newPage方法创建一个新的页面实例,并设置视口大小
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 800 });

// 使用page.on方法监听request事件,如果请求的资源类型是media,并且请求的URL以https://video.twimg.com/开头,则打印出请求的URL
page.on("request", (request) => {
if (
request.resourceType() === "media" &&
request.url().startsWith("https://weibo.com//")
) {
console.log(request.url());
}
});

// 使用page.goto方法访问传入的URL
await page.goto(url);

// 使用page.click方法点击页面上选择器为.r-1ndi9ce > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1) 的元素
await page.click(
".r-1ndi9ce > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1)"
);

// 使用sleep函数等待一段时间(SLEEP)
await sleep(SLEEP);

// 使用page.screenshot方法截取页面图片并保存为debug.png文件
await page.screenshot({ path: "debug.png" });

// 使用browser.close方法关闭浏览器实例
await browser.close();
}

// 最后,在主程序中,获取命令行参数中的第一个参数作为URL,并调用view函数。
const url = process.argv[2]; // 获取命令行参数中的第一个参数作为URL

if (url) {
view(url, PROXY);
} else {
console.log("请输入一个有效的URL");
}`
puppeteer相当于python selenium 控制无头Chrome,作为前端程序员,那python虽然语法容易但毕竟学的也比较多,所以建议可以试试puppeteer。

标签:const,爬虫,page,nth,child,puppeteer,前端开发
From: https://www.cnblogs.com/mmz77-aa/p/17212030.html

相关文章

  • 什么是前端开发领域的 Page Blink 和 Page Flicker
    我做了一段时间的Angular之后,听到同事们处理Githubissue时,偶尔会提到PageBlink这个名词。例如这个:可以看出如果一个Angular应用缺乏ngrxstore,缓存以及SSR......
  • python爬虫案列03,爬取58二手房信息
    importrequestsfromlxmlimportetreeurl="https://fy.58.com/ershoufang/?PGTID=0d100000-0091-53ca-4993-576198ca62e3"headers={"user-agent":"Mozilla/5.......
  • python爬取免费高匿爬虫ip
    现在大部分门户网站都会做一些反爬虫的策略,对于长期做数据爬虫的程序猿来说那是深有体会。其实说白了就是用同一个地址频繁去爬虫一个网页很容易导致ip被关进小黑屋,为了安......
  • Python3爬虫教程之ADSL拨号爬虫ip池的使用
    在我之前做爬虫经常需要维护自己的爬虫ip池,他可以挑选出很多有用的爬虫地址,因为不是专业的而且这些爬虫ip通常是公共爬虫ip,所以可用率不是太高,而且这样类型的地址很大情况下......
  • python爬虫案列02,百度翻译,KFC城市查询
    百度翻译(有点潦草,懒得优化)看运行结果:过程:F12,输入一个单词,找到带有翻译结果的数据包,查看请求方式,请求的url,payload代码:#导入模块importrequestsimportjsonwor......
  • Python 网络爬虫
    必考点1.导入库2.定义变量url=''''link=''''headers={user-agent:} 3.执行代码r=requests.get('''地址''',headers=headers,timeout=10)response.html ......
  • Python 爬虫实战—热门视频排行榜
    基于python的requests、BeautifulSoup4第三方库,对哔站全站范围热门视频排行榜前一百实时爬取。importrequestsfrombs4importBeautifulSoupfile=open("hot100......
  • 对C++做爬虫的代码进行简单分析
    有这样一段代码#include<stdio.h>#include<tchar.h>#include<windows.h>#include<urlmon.h>#pragmacomment(lib,"urlmon.lib")intmain(){ TCHARurl[]=TE......
  • python爬虫获取国家统计局区划代码和城乡划分代码添加到数据库
    importpymysqlfrombs4importBeautifulSoupimportrequestsimporttimefromlxmlimportetreedefget_area(year):year=str(year)url="http://ww......
  • 网络爬虫-爬取豆瓣Top250
    一、选题的背景(10分)本次爬取的内容是豆瓣网站平均评分第一名到第二百五十名的电影名称,电影链接,电影封面图片链接,电影的概况和电影的相关信息。现在电影是人们一种很普遍的......