简单获取axios
+ cheerio
-
安装
npm install axios
,npm install cheerio
,参考cheerio -
导入模块
let axios=require('axios') const cheerio=require('cheerio')
-
请求数据
axios.get(httpUrl).then(res=>{ // console.log(res.data) // 用cheerio解析html文档 let $= cheerio.load(res.data) // console.log($) // 获取当前页面所有表情链接 $('#home .col-sm-9>a').each((index,element)=>{ // console.log(element) // 获取每一个a标签中的href属性值 let href=$(element).attr('href') console.log(href) }) })
-
反爬虫
// 使用第三方代理 let axios=require('axios') let httpUrl="https://www.doutula.com/" let options={ proxy:{ host:'221.229.252.98', // 代理ip port:9797 // 代理端口号 } } axios.get(httpUrl,options).then(res=>{ console.log(res) })
使用puppeteer
插件
-
安装
npm i puppeteer
,参考puppeteer或者puppeteer CN -
引入,打开浏览器窗口
let puppeteer=require('puppeteer') async function test() { // puppeteer.launch 实例开启浏览器, // 可以传入一个options对象, // 可以配置为无界面浏览器和有界面浏览器,无界面浏览器性能更高,有界面一般用于调试 let options={ // 设置视窗的框高 defaultViewport:{ width:800, height:800 }, // 设置为有界面,如果为true,则为无界面 headless:false } const browser = await puppeteer.launch(options) // 打开页面 let page = await browser.newPage() // 访问网站 await page.goto('https://www.baidu.com') } test()
-
截屏
async function test() { // puppeteer.launch 实例开启浏览器, // 可以传入一个options对象, // 可以配置为无界面浏览器和有界面浏览器,无界面浏览器性能更高,有界面一般用于调试 let options={ // 设置视窗的框高 defaultViewport:{ width:800, height:800 }, // 设置为有界面,如果为true,则为无界面 headless:false } const browser = await puppeteer.launch(options) // 打开页面 let page = await browser.newPage() // 访问网站 await page.goto('https://www.baidu.com') // 截屏 await page.screenshot({path: 'example.png'}) } test()
-
获取页面元素
async function test() { // puppeteer.launch 实例开启浏览器, // 可以传入一个options对象, // 可以配置为无界面浏览器和有界面浏览器,无界面浏览器性能更高,有界面一般用于调试 let options={ // 设置视窗的框高 defaultViewport:{ width:800, height:800 }, // 设置为有界面,如果为true,则为无界面 headless:false } const browser = await puppeteer.launch(options) // 打开页面 let page = await browser.newPage() // 访问网站 await page.goto('https://www.baidu.com') // 获取页面内容id为u1下的a标签 // $$eval函数使得回调函数可以运行在浏览器中 let elements=await page.$$eval('#u1 a',(elements)=>{ console.log(elements) // 在浏览器控制台输出 let eles=[] elements.forEach((item,i)=>{ console.log(item.innerHTML) // 在浏览器控制台输出 let eleObj={ href:item.getAttribute('href'), text:item.innerText } eles.push(eleObj) }) }) // 监听事件,监听浏览器输出内容 page.on('console',(...args)=>{ console.log(args) // 在命令提示符终端输出 }) } test()
-
操作页面内容
async function test() { // puppeteer.launch 实例开启浏览器, // 可以传入一个options对象, // 可以配置为无界面浏览器和有界面浏览器,无界面浏览器性能更高,有界面一般用于调试 let options={ // 设置视窗的框高 defaultViewport:{ width:800, height:800 }, // 设置为有界面,如果为true,则为无界面 headless:false } const browser = await puppeteer.launch(options) // 打开页面 let page = await browser.newPage() // 访问网站 await page.goto('https://www.baidu.com') // 获取输入框 let elementInput= await page.$('#kw') // console.log(elementInput[0]) // 聚焦输入框 await elementInput.focus() // 向输入框输入内容内容 await page.keyboard.type('北京') // 获取搜索按钮 let elementButton=await page.$('#form input[type="submit"]') // 点击搜索按钮 await elementButton.click() } test()
爬虫
- 通过模拟浏览器的请求,服务器返回我们需求数据,将数据解析出来,并且保存。这样的行为称爬虫
- 爬虫流程
- 确定想要的数据
- 分析页面
获取数据的方式(正则,cheerio)
- 编写单个数据获取的案例
- 遇到阻碍,进行反爬对抗
将请求头设置为跟浏览器一样
设置延时爬取单个页面或者通过代理