网站首页 > 教程分享 正文
网络爬虫(Web Crawler)又称为网络蜘蛛(Web Spider)或Web信息采集器,是用来收集数据,它是一种按照指定规则,自动抓取或下载网络资源的计算机程序或自动化脚本。最常见的用途就是利用爬虫来收集数据、刷流量和秒杀抢购活动。
普通网络爬虫的流程大致如下图所示,一般包含URL队列模块、页面内容获取模块、页面解析模块、数据存储模块和URL过滤模块。具体流程可描述如下。
爬虫的步骤:
一、获取网页
使用代码抓取网页的源码内容。可以使用以下几种方法:
1.1 HttpWebRequest/HttpWebResponse、HttpClient
这是.Net类库提供的类,可以方便的抓取网页源码,优点是使用方便,缺点是不能抓取动态页面。
1.2 使用Selenium
Selenium本身是一个自动化浏览器测试工具,但也可以被用于爬虫。通过使用不同的浏览器驱动,可以支持不同的浏览器,包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等. 优点是可以获取动态页面,而且可以模拟鼠标点击,拖动等操作。缺点是会弹出浏览器窗体。
1.3 嵌入浏览器
可以使用WebBrowser/CEF等浏览器控件。抓取原理是使用内嵌浏览器打开一个页面,再获取页面源码。这种方式的优点是可以抓取动态页面,缺点是抓取是被动的,不能主动控制。
1.4 无头浏览器
Headerless Browser(无头的浏览器)是浏览器的无界面状态,可以在不打开浏览器GUI的情况下,使用浏览器支持的性能。无头浏览器和嵌入浏览器获取网页源码的原理是一样的,都是使用浏览器打开一个页面,再获取源码。但它是以Headless方式运行,可以不用显示在界面上。在C#中常用的是Puppeteer-Sharp、PhantomJS,这个库还支持主动等待抓取结果。
二、提取网页信息
网页源码获取到之后,我们需要对自己想要的内容进行提取,最常用的,肯定就是链接里的图片和视频等。 在C#中,可以使用以下方式来提取网页信息。
2.1 正则表达式
这种方式虽然需要学习正则表达式的相关知识,但功能强大,几乎无所不能。这里我做了一些总结,可以参考一下
2.2 使用AngleSharp/HtmlAgilityPack等支持DOM的HTML解析库。
HtmlAgilityPack支持XPath查询,暂不支持CSS选择器。AngleSharp支持CSS选择器,暂不支持XPath查询附加:
- 如果使用的是CEF/Puppeteer-Sharp,可以执行js来进行信息提取;
- 如果使用的是Selenium,可直接使用Selenium自带的CSS选择器和XPath查询来进行信息提取;
三、保存数据
这里得看自己需求,推荐SQLite/Berkeley DB等嵌入式数据库,Redis和Mongodb也是不错的选择。如何抓取动态网页的内容动态网页指的是采用 了Ajax 、前端模块化工具来构建,整个网页由 JavaScript 动态渲染出来的页面。对于这种情况,我们可以分析其后台 Ajax 接口,也可使用 Selenium/CEF/Puppeteer-Sharp这样的库来实现模拟 JavaScript渲染 。
- 上一篇: CSRF原理及解决方案 csrf工作原理
- 下一篇: 编写个人的Ajax:感受前端异步世界的魅力
猜你喜欢
- 2024-12-25 Mock.js原理 mock.js作用
- 2024-12-25 2022 Java 企业面试题汇总 最新java面试
- 2024-12-25 搜索引擎的工作原理图解 搜索引擎的工作原理分为哪五步
- 2024-12-25 浅谈前后端交互的基本原理 浅谈前后端交互的基本原理是什么
- 2024-12-25 websocket连接太多导致服务器卡顿怎么办?一招轻松实现横向扩展
- 2024-12-25 编写个人的Ajax:感受前端异步世界的魅力
- 2024-12-25 CSRF原理及解决方案 csrf工作原理
- 2024-12-25 vue - Vue中的ajax vue中使用ajax
- 2024-12-25 看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)
- 2024-12-25 看完让你彻底搞懂Websocket原理 websocket干嘛的
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)