黑*头条_第8章_爬虫系统搭建

文章目录

  • 黑*头条_第8章_爬虫系统搭建
    • 目标
  • 1爬虫是什么
  • 2名词解释
    • 2.1 Webmagic:
    • 2.2 webmagic的总体架构:
    • 2.3 webmagic的总体架构的四大组件
      • 2.3.1 Downloader
      • 2.3.2 PageProcessor
      • 2.3.3 Scheduler
      • 2.3.4 Pipeline
    • 2.4代理IP:
      • 2.4.1代理IP类型:
    • 2.5 Selenium方式下载页面:
      • 2.5.1chrome的无头(headless)模式:
      • 2.5.2 webdriver
      • 2.5.3 ChromeDriver下载
    • 2.6 Xpath
      • 2.6.1 Xpath是什么
      • 2.6.2 Xpath的定位
    • 2.7 Cron表达式
      • 2.7.1 Cron表达式的形式
      • 2.7.2 cron表达式格式
  • 3设计思路
  • 4 需求分析
    • 4.1 功能需求
      • 4.1.1 CSDN爬虫需求
      • 4.1.2 爬虫常见问题
  • 5 导入heima-leadnews-crawler项目
  • 6 爬虫服务的初始化工作
    • 6.1初始化URL的获取
    • 6.2 下载
      • 6.2.1前置工作
      • 6.2.2 SeleniumClient 下载页面
      • 6.2.3 测试
      • 6.2.4 爬虫相关类
      • 6.2.6 代理下载相关(暂不使用代理)
      • 6.2.7 ProxyHttpClientDownloader类
    • 6.3 文档处理
      • 6.3.1 前置工作

目标

  • 了解爬虫是什么
  • 了解webmagic及其四大组件
  • 了解爬虫系统中的ip代理
  • 能够导入爬虫系统
  • 知道文档下载和文档解析的思路

1爬虫是什么

网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方式。从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。

传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

通俗理解:爬虫是一个模拟人类请求网站行为的程序。可以自动请求网页、把数据抓取下来,然后使用一定的规则提取有价值的数据。

聚焦爬虫:通常我们自己撸的为聚焦爬虫面向主题爬虫、面向需求爬虫:会针对某种特定的能容去爬取信息,而且保证内容需求尽可能相关

2名词解释

2.1 Webmagic:

WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。

1、WebMagic的设计参考了业界最优秀的爬虫Scrapy,而实现则应用了HttpClient、Jsoup等Java世界最成熟的工具。

2、WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成,核心代码非常简单,主要是将这些组件结合并完成多线程的任务。这意味着,在WebMagic中,你基本上可以对爬虫的功能做任何定制。

3、WebMagic的核心在webmagic-core包中,其他的包你可以理解为对WebMagic的一个扩展——这和作为用户编写一个扩展是没有什么区别的。

4、虽然核心需要足够简单,但是WebMagic也以扩展的方式,实现了很多可以帮助开发的便捷功能。例如基于注解模式的爬虫开发,以及扩展了XPath语法的Xsoup等。这些功能在WebMagic中是可选的,它们的开发目标,就是让使用者开发爬虫尽可能的简单,尽可能的易维护。

2.2 webmagic的总体架构:

WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。

而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。

2.3 webmagic的总体架构的四大组件

2.3.1 Downloader

Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。

2.3.2 PageProcessor

PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。

在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。

2.3.3 Scheduler

Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。

除非项目有一些特殊的分布式需求,否则无需自己定制Scheduler。

2.3.4 Pipeline

Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。

Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline。对于一类需求一般只需编写一个Pipeline。

更多内容可以查看官网文档 http://webmagic.io/docs/zh/

2.4代理IP:

当我们对某些网站进行爬去的时候,我们经常会换IP来避免爬虫程序被封锁。其实也是一个比较简单的操作,目前网络上有很多IP代理商,例如西刺,芝麻,犀牛等等。这些代理商一般都会提供透明代理,匿名代理,高匿代理。

2.4.1代理IP类型:

代理IP一共可以分成4种类型。前面提到过的透明代理IP,匿名代理IP,高匿名代理IP,还有一种就是混淆代理IP。最基础的安全程度来说呢,他们的排列顺序应该是这个样子的高匿 > 混淆 > 匿名 > 透明。

2.5 Selenium方式下载页面:

Selenium 是一个用于 Web 应用程序测试的工具。它的优点在于,浏览器能打开的页面,使用 selenium 就一定能获取到。但 selenium 也有其局限性,相对于脚本方式,selenium 获取内容的效率不高。

我们主要使用它可以调用chrome浏览器来获取必须要的Cookie,因为csdn的cookie通过js来生成的,需要浏览器才能得到Cookie

2.5.1chrome的无头(headless)模式:

在 Chrome 59中开始搭载Headless Chrome。这是一种在无需显示headless的环境下运行 Chrome 浏览器的方式。从本质上来说,就是不用 chrome 浏览器来运行 Chrome 的功能!它将 Chromium 和 Blink 渲染引擎提供的所有现代 Web 平台的功能都带入了命令行。

由于存在大量的网页是动态生成的,在使用浏览器查看源代码之后,发现网页dom只有一个root元根元素和一堆js引用,根本看不到网页的实际内容,因此,爬虫不仅需要把网页下载下来,还需要运行JS解析器,将网站呈现出最终的效果。

在Headless出现之前,主要流行的是PhantomJS这个库,原理是模拟成一个实际的浏览器去加载网站。Headless Chome出现之后,PhantomJS地位开始不保。毕竟Headless Chome本身是一个真正的浏览器,支持所有chrome特性,而PhantomJS只是模拟,因此Headless Chome更具优势

2.5.2 webdriver

WebDriver针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持,

成支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver还利用操作系统级的调用模拟用户输入。WebDriver支持Firefox(FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver)和Chrome (ChromeDriver)。 它还支持Android (AndroidDriver)和iPhone (IPhoneDriver)的移动应用测试。它还包括一个基于HtmlUnit的无界面实现,称为HtmlUnitDriver。WebDriver API可以通过Python、Ruby、Java和C#访问,支持开发人员使用他们偏爱的编程语言来创建测试。

2.5.3 ChromeDriver下载

ChromeDriver 是 google 为网站开发人员提供的自动化测试接口,它是 selenium2chrome浏览器 进行通信的桥梁。selenium 通过一套协议(JsonWireProtocol :https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol)和 ChromeDriver 进行通信,selenium 实质上是对这套协议的底层封装,同时提供外部 WebDriver 的上层调用类库。

和chrome版本的对应关系

chromedriver 版本 chrome 版本
ChromeDriver 2.36 Chrome v63-65
ChromeDriver 2.35 Chrome v62-64
ChromeDriver 2.34 Chrome v61-63
ChromeDriver 2.33 Chrome v60-62

下载地址如下

http://npm.taobao.org/mirrors/chromedriver/

详细内容可以查看 https://www.jianshu.com/p/31c8c9de8fcd

2.6 Xpath

2.6.1 Xpath是什么

xpath是一种在xml中查找信息的语言,普遍应用于xml中,在类xml的html中也可以使用,在selenium自动化中起核心作用,是写selenium自动化脚本的基础。

2.6.2 Xpath的定位

xpath的定位主要由路径定位、标签定位、轴定位组合构成,外加筛选功能进行辅助,几乎可以定位到任意元素

(1)标签定位

通过标签名即可找到文档中所有满足的标签元素,如:

xpath 说明
div 找到所有的div标签元素
input 找到所有的input标签元素
* 替代任意元素或属性
@属性名 找到指定名称的属性

(2)路径定位

通过路径描述来找到需要的元素,“/”开头表示从根路径开始,其他位置表示子元素或分隔符;“//”表示后代元素;“…”表示父元素(上一级);“.”表示当前元素;“|”表示多条路径

xpath 说明
/html 找到根元素html
//div 找到所有的div元素
//div[@id=‘id1’]/span 找到id=“id1”的div元素的子元素span
//div[@id=‘id1’]//span 找到id=“id1”的div元素下的所有后代元素span
//div[@id=‘id1’]/@class 找到id=“id1”的div元素的class属性
//div[@id=‘id1’]/span|//div[@id=‘id2’]/span 找到id=“id1”和id=“id2”的div元素的子元素span

(3)轴定位

通过轴运算符加上“::”和“标签”,找到需要的元素,类似路径定位,如:

xpath 说明
//div[@id=‘id1’]/child::span 找到id=“id1”的div元素的子元素span,同//div[@id=‘id1’]/span
//div[@id=‘id1’]/attribute::class 找到id=“id1”的div元素的class属性,同//div[@id=‘id1’]/@class
//div[@id=‘id1’]/preceding-sibling:

黑*头条_第8章_爬虫系统搭建相关推荐

  1. 黑*头条_第12章_ 热点文章处理

    黑*头条_第12章_ 热点文章处理 文章目录 黑*头条_第12章_ 热点文章处理 热点文章处理 目标 1 热文章处理-功能需求 2 热文章处理-热数据计算 2.1 思路分析 2.2 实体类 2.3 M ...

  2. 黑*头条_第5章_延迟任务精准发布文章(新版)

    黑*头条_第5章_延迟任务精准发布文章(新版) 文章目录 黑*头条_第5章_延迟任务精准发布文章(新版) 1)文章定时发布 2)延迟任务概述 2.1)什么是延迟任务 2.2)技术对比 2.2.1)De ...

  3. 黑*头条_第4章_文章搜索前后端成形记 实名认证审核

    黑*头条_第4章_文章搜索前后端成形记 & 实名认证审核 文章目录 黑*头条_第4章_文章搜索前后端成形记 & 实名认证审核 文章搜索前后端成形记 & admin实名认证审核 ...

  4. Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例

    Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例 文章目录 Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例 Seaborn 学习目标 6.1 Se ...

  5. iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门

    iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 文章目录 iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 PDF报表入门 3 ...

  6. 亿可控_第1章_系统分析与设计

    亿可控_第1章_系统分析与设计 文章目录 亿可控_第1章_系统分析与设计 第1章 亿可控系统分析与设计 学习目标 1.物联网行业分析 1.1 什么是物联网 1.2 物联网应用领域 1.3 物联网发展现 ...

  7. 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战

    商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 文章目录 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 第八章 账号微服务注册模块+短信验 ...

  8. 探花交友_第10章_实现推荐功能

    探花交友_第10章_实现推荐功能 文章目录 探花交友_第10章_实现推荐功能 1.了解推荐系统 1.1.什么是推荐系统? 1.2.电商是推荐系统的先行者 1.3.推荐系统业务流程 1.4.协同过滤推荐 ...

  9. 探花交友_第2章_环境搭建(新版)

    探花交友_第2章_环境搭建(新版) 文章目录 探花交友_第2章_环境搭建(新版) 课程介绍 <探花交友> 1.项目介绍 1.1.项目背景 1.2.市场分析 1.3.目标用户群体 1.4.使 ...

最新文章

  1. C++的多个有序链表合并
  2. mysql having in_正确理解MySQL中的where和having的区别
  3. Interview:算法岗位面试—10.17早上—上海某科技公司算法岗位(偏算法,独角兽)非技术面试之比赛项目讲解和项目意义的探讨
  4. Android退出程序(一)——单例模式
  5. System V IPC之信号灯
  6. 趣挨踢 | 跳槽季,让我们一起攻克算法吧!
  7. python旋转坐标系_python实现一个点绕另一个点旋转后的坐标
  8. Istio服务网格路由入门
  9. 领导力、愚狂和改变:爱因斯坦是否错了?
  10. html初识教学反思,五年级长方体的认识教学反思
  11. 关闭计算机主机还亮着,Win10系统电脑关机后主机电源灯依然亮着的解决方法
  12. python无法打开h5权限_求助:python post请求访问不到数据
  13. xf0x9f java mysql_MySql导入数据报错Incorrect string value: ‘xF0x9Fx90x82’
  14. Oracle连接不上解决办法合集
  15. InterSystems开发者竞赛:InterSystems IRIS Analytics
  16. 利用Excel批量修改图片名称
  17. 齐次线性方程组的基础解系
  18. 窥探Linux内核进程信息task_struct
  19. Particle System调整
  20. dev c++怎么设置断点_斑马进度计划软件可以检查计划中是否存在逻辑断点和错误逻辑关系...

热门文章

  1. 更新后的哥德巴赫猜想(位运算)
  2. 没用户、没技术,炒了这么久的区块链游戏似乎找到了一条新思路
  3. 7.5 ZUFEIOJ E: 守望者的逃离 贪心
  4. Docker下运行Presto访问Redis及BI展示
  5. 湖北二师计算机学院教授,湖北第二师范学院计算机学院谢莎老师
  6. 视频是新时代的文本,微信也不得不认了!
  7. 区分Android中的各种单位——in、mm、pt、px、dp、dip、sp
  8. 游戏测试工程师的光荣与梦想(一)-百炼成钢
  9. 入职两年涨薪3K被拒,平时好脸给多了?转身立马裸辞走人...
  10. 服务器系统盘40g是什么,云服务器 40g系统盘