爬虫总结
1.爬虫介绍
通过模拟浏览器的请求,服务器就会根据我们的请求返回我们想要的数据,将数据解析出来,并且进行保存。
2.爬虫流程
1-目标:确定你想要获取的数据
- 确定想要的数据在什么页面上(一般详细的数据会在详情页)
- 确定在哪些页面可以链接到这些页面(一般分类列表页面会有详情页的链接数据)
- 寻找页面之间和数据之间的规律
2-分析页面
获取数据的方式(正则,cherrio)
2. 分析数据是通过ajax请求的数据,还是html里自带的数据 3. 如果是通过AJAX请求的数据,那么需要获取ajax请求的链接,一般请求到的数据都为JSON格式数据,那么就会比较容易解析。 4. 如何数据在HTML里面,那么就用cherrio通过选择器将内容选中
3-编写单个数据获取的案例
解析出分类页的链接地址
2. 解析出列表页的链接地址 3. 解析出详情页的链接地址 4. 解析详情页里面想要获取的数据 5. 将数据进行保存到本地或者是数据库
4-如果遇到阻碍进行反爬虫对抗
User-Agent是否是正常浏览器的信息
2. 将请求头设置成跟浏览器一样的内容 3. 因为爬虫的爬取速度过快,会导致封号。1那么可以降低速度进行解决,2可以使用代理进行解决 4. 如果设置需要凭证,那么可以采用无界浏览器真实模拟。
3.请求数据的库
request,axios:通过库,帮助我们快速实现HTTP请求包的打包
1 | request.get('请求地址', { |
axios优势会更明显,前后端通杀,前后端调用的方式一致。
1 | axios.get('请求地址',参数对象).then(function (response) { |
axios获取图片
1 | axios({ |
puppeteer:完全模拟浏览器
打开浏览器
1 | let options = { |
打开新标签页
1 | let page = await browser.newPage() |
获取所有浏览器中的页面
1 | let pages = await browser.pages() |
关闭浏览器
1 | browser.close() |
将页面跳转至
1 | await page.goto(url) |
获取页面的对象,并进行操作
1 | let btn = await page.$(selector) |
在页面上写入内容或者键盘按键
1 | await page.keyboard.type('Hello World!'); |
设置鼠标的移动
1 | await page.mouse.move(0, 0); |
截获页面请求
1 | await page.setRequestInterception(true); |
获取浏览器的信息和内容
1 | page.$eval(selector,(item)=>{return item}) |
3.2 编码解析
以下代码没有任何实用性, 仅是对解析字体编码提供一种思路
3.2.1 获取随机字体文件的链接地址
1 | let fontUrl = $("head > style").html() |
3.2.2 将随机的字体文件下载并进行解析
1 | //已文件流的形式下载字体图标库 |
3.2.3 将编码切割成数组,逐一进行解析(循环解析)
1 | let arr1 = aa.split("") |
3.2.4 编码解析
循环解析字符串编码, 循环每个item, 当成str传入解析函数中
1 | async function parseNum(str){ |
3.2.5 结果处理
判断相似度,最大相似度大于50%则采用,不然返回原值
1 | arr11[i] = parseFloat(result.max)>0.5?result.key:item; |