网站首页 > 技术文章 正文
网络爬虫(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渲染 。
猜你喜欢
- 2025-03-30 python 爬虫如何突破登录验证(python 爬虫 登录)
- 2025-03-30 奥力给!可以自己定义流程的图形化爬虫&自动化测试平台—Kspider
- 2025-03-30 Java爬虫原理(小白也能懂)(java爬虫入门)
- 2025-03-30 手把手教你用 node 写一个爬虫(node做爬虫)
- 2025-03-30 零基础上手秒杀系统:抢购接口隐藏 + 单用户限制频率
- 2025-03-30 使用CefSharp和Javascript实现网络爬虫
- 2025-03-30 安全知识丨关于网络爬虫的基础讲解
- 2025-03-30 细说小白学python爬虫过程中常见的反爬措施及解决思路(干货)
- 2025-03-30 「数据分析」2种常见的反爬虫策略,信息验证和动态反爬虫
- 2025-03-30 python:最简单爬虫之爬取小说网Hello wrold
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)