day08_爬虫系统搭建

目标

  • 了解爬虫是什么
  • 了解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:

头条--黑马头条_day08相关推荐

  1. 2019黑马python面试资料_2019最新Python黑马头条推荐系统项目

    『课程目录』:├─黑马头条推荐第一天) L) P$ Q$ }7 U│ ├─01_视频 │ │ 01_黑马头条推荐架构与业务流 │ │ 02_开发环境介绍( k# }! [2 n8 S$ }│ │ 03 ...

  2. java 黑马头条 day4 自媒体文章发布 自媒体文章列表查询 频道列表展示 自媒体文章-发布、修改、保存草稿 自媒体文章-根据id查询 自媒体文章-删除

    1 自媒体文章列表查询 1.1 需求分析 1.2 表结构和实体类 wm_news 自媒体文章表 需求: 如果有文章标题,按照文章标题模糊查询 如果有频道信息,按照频道ID查询 如果有文章状态,按照状态 ...

  3. 黑马头条推荐系统完整版(包括虚拟机和数据,代码已修复过可完美跑起来)

    链接:(72条消息) 黑马头条推荐系统完整版(包括虚拟机和数据,代码已修复过可完美跑起来)-Python文档类资源-CSDN文库 如果网盘失效请加v获取

  4. 前端基础第五天项目 社交媒体黑马头条项目-文章模块和评论

    七.文章详情 创建组件并配置路由 1.创建 views/article/index.vue 组件 <template><div class="article-contain ...

  5. Python黑马头条推荐系统第五天 头条排序模型进阶-神经网络

    黑马头条排序模型进阶 7.1 神经网络基础与原理 学习目标 目标 了解感知机结构.作用以及优缺点 了解tensorflow playground的使用 说明感知机与神经网络的联系 说明神经网络的组成 ...

  6. #博学谷it学习技术支持#黑马头条知识点1

    #博学谷it学习技术支持#黑马头条知识点1 目录: 一.文章列表加载 二.Freemarker 三.对象存储服务MinIO 四.文章详情功能 黑马头条day2 一. 文章列表加载 1)需求分析 2)表 ...

  7. 新黑马头条项目经验(黑马)

      swagger (1)简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务(API Documentation & Design ...

  8. 黑马头条移动项目(一):项目介绍、项目技术点介绍、项目包介绍

    1. 项目介绍 黑马头条移动端是一个IT资讯移动web应用,有着和今日头条类似的资讯浏览体验. 主要功能:资讯列表.标签页切换,文章举报,频道管理.文章详情.关注功能.点赞功能.评论功能.搜索功能.登 ...

  9. 黑马头条推荐项目知识点总结(一)

    实际生产环境中,我们要处理的数据来自可能各个地方,业务数据库,爬虫数据库,日志文件,api网关买入数据等. 本次黑马头条推荐项目中,业务数据存储在mysql中,用户行为数据存储在日志中,因此采用两种技 ...

最新文章

  1. Java排序算法总结
  2. android 启动服务权限,android – 当我尝试启动服务时权限被拒绝
  3. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数
  4. java POI 写入百万数据到 excel
  5. Python用户交互
  6. 无人驾驶(pid算法)
  7. SAP License:ERP顾问们,为何你会面试失败?
  8. 生成模型和判别模型直接的区别
  9. Python Flask Web 第四课 —— 模板引擎Jinja2
  10. 机器学习笔记(三十二):集成学习、随机森林
  11. 哈工大同义词词林扩展版-资源分享
  12. CPLEX仿真能力可行性分析
  13. 2012北京地区Java程序员的平均工资调查数据分析
  14. 活动图求最少时间和松弛时间
  15. CentOS 7 linux安装迅雷Xware实现远程下载
  16. unity中控制游戏物体移动最基本的三种方法
  17. 如何理解WPF中的样式(Style)与模板ControlTemplate
  18. JS通用表单验证函数
  19. react classnames
  20. 删除快速方法里的wps网盘牛皮癣文件夹

热门文章

  1. shell以分号结尾_一个shell脚本引发的对于分号的使用说明
  2. 今又重阳,上海宝付愿天下父母平安健康
  3. 幻影机器人庄园参观路线_上海幻影机器人庄园
  4. 声音信号预处理matlab,实验一 MATLAB音频信号处理实验
  5. cmd向服务器传文件,cmd传文件给Linux服务器
  6. Linux下tar压缩解压命令
  7. 【C操作符详解】之 移位操作符
  8. 【qstock量化】技术形态与概念热点选股池
  9. C#培训2019-10-29 KeyPress事件应用——确保输入只是数字1~9,而没有英文、字符以及数字0
  10. 关于日期的显示与输入