1 爬虫概述

(1)互联网爬虫

  1. 一个程序,根据Url进行爬取网页,获取有用信息

(2)核心任务

  1. 爬取网页
  2. 解析数据
  3. 难点 :爬虫和反爬虫之间的博弈

(3)爬虫语言

  1. php 多进程和多线程支持不好
  2. java 目前java爬虫需求岗位旺盛,但代码臃肿,重构成本高,而爬虫需要经常修改,所以不好用
  3. C\C++ 学习成本比较高,性能和效率高,停留在研究层面,市场需求量小。体现程序员能力。
  4. python 语法简洁优美、对新手友好学习成本低、支持的模块非常多、有scrapy非常强大的爬虫框架

(4)爬虫分类

  1. #通用爬虫
  2. 实例 百度、360googlesougou等搜索引擎, 将网上的数据进行爬取并进行排名展示
  3. 功能 访问网页->抓取数据->数据存储->数据处理->提供检索服务
  4. 抓取流程
  5. 1. 给定一些起始的URL,放入待爬取队列
  6. 2. 从队列中获取url对象,开始爬取数据
  7. 3. 分析网页,获取网页内的所有url,入队,继续重复执行第二步
  8. 搜索引擎如何获取新网站链接
  9. 1. 主动给搜索引擎提交url
  10. 2. 在其他网站中设置友情链接
  11. 3. 百度和DNS服务商合作,只要有域名,就会收录新网站
  12. robots协议
  13. 1.一个约定俗成的协议,添加robots.txt文件,来说明本网站哪些内容不可以被抓取,起到限制作用
  14. 2.自己写的爬虫无需遵守
  15. 网站排名(SEO)
  16. 1. 根据pagerank值进行排名(参考个网站流量、点击率等指标)
  17. 2. 百度竞价排名,钱多就是爸爸
  18. 缺点:
  19. 1. 抓取的数据大多是无用的
  20. 2.不能根据用户的需求来精准获取数据
  21. #聚焦爬虫
  22. 功能
  23. 根据需求,实现爬虫程序,抓取需要的数据
  24. 原理
  25. 1.网页都有自己唯一的url(统一资源定位符)
  26. 2.网页都是html组成
  27. 3.传输协议都是http/https
  28. 设计思路
  29. 1.确定要爬取的url
  30. 2.模拟浏览器通过http协议访问url,获取服务器返回的html代码
  31. 3.解析html字符串(根据一定规则提取需要的数据)
  32. # URL放入爬取队列原因: 很多网页都有友情链接,如果爬虫漫无目的的爬取数据会爬到其他网站,不同的网站都会存在不同的外部链接,所以有可能会重复,从队列中获取可以避免重复网址的爬取

(5)整体框架

  1. 1.python语法
  2. 2.使用的python
  3. urllib.request
  4. urllib.parse
  5. requests
  6. scrapy
  7. 3.解析内容方式:
  8. 正则表达式
  9. xpath 推荐使用xpath
  10. bs4
  11. jsonpath
  12. 4.采集动态html(一般模拟浏览器):因为所有的网站都不止存在一个请求(js.csss等动态请求),如果仅仅对网站首页 发送请求,会导致网站内容接受不全 selenium + phantomjs
  13. 5.scrapy
  14. 高性能异步网络爬虫框架
  15. 6.分布式爬虫
  16. scrapy-redis组件
  17. 7.反爬虫的一般手段
  18. User-Agent 通过请求头传递给服务器,用以说明访问数据浏览器信息反爬虫:先检查是否有UA,或UA是否合法
  19. 代理IP : 西刺代理
  20. 验证码访问 : 打码平台
  21. 动态加载网页
  22. 数据加密 : 分析js代码
  23. 爬虫-反爬虫-反反爬虫

2 http协议

(1)常见端口

  1. http 明文传输,端口号80
  2. https 加密传输,端口号443
  3. 常见服务器端口号
  4. ftp 21
  5. ssh 22
  6. mysql 3306
  7. MongoDB 27017
  8. redis 6379

(2) http工作原理

  1. url组成 协议 主机HOST 端口号 资源路径 query-string参数 锚点
  2. url: http://www.baidu.com:80/index.html?username=dancer&password=123456#anchor
  3. 上网原理 : 一个网页一般都不止有一个url请求,在网页内.js\.css文件也都可以是请求。当所有的请求都下载完成后,浏览器会把css.js.img等都翻译成图文并茂的形式
  4. #请求头详解
  5. Accept
  6. Accept-Encoding
  7. Accept-Language
  8. Cache-Control 缓存控制
  9. Connection
  10. Cookie
  11. Host
  12. Upgrade-Insecure-Requests 是否升级为https协议
  13. User-Agent 用户代理
  14. X-Requested-With ajax请求
  15. #响应头详解
  16. Connection
  17. Content-Encoding gzip 压缩格式,浏览器需要对其进行解压缩,我们自己写的爬虫,不要写这个
  18. Content-Type 服务器向客户端回传数据类型
  19. Date
  20. Expires 过期时间
  21. Server
  22. Transfer-Encoding 内容是否分包传输

(3) http常见的状态码

  1. 1
  2. xx:信息
  3. 100 Continue
  4. 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。
  5. 101 Switching Protocols
  6. 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。
  7. 2xx:成功
  8. 200 OK
  9. 请求成功(其后是对GETPOST请求的应答文档)
  10. 201 Created
  11. 请求被创建完成,同时新的资源被创建。
  12. 202 Accepted
  13. 供处理的请求已被接受,但是处理未完成。
  14. 203 Non-authoritative Information
  15. 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。
  16. 204 No Content
  17. 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
  18. 205 Reset Content
  19. 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。
  20. 206 Partial Content
  21. 客户发送了一个带有Range头的GET请求,服务器完成了它。
  22. 3xx:重定向
  23. 300 Multiple Choices
  24. 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。
  25. 301 Moved Permanently
  26. 所请求的页面已经转移至新的url
  27. 302 Moved Temporarily
  28. 所请求的页面已经临时转移至新的url
  29. 303 See Other
  30. 所请求的页面可在别的url下被找到。
  31. 304 Not Modified
  32. 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
  33. 305 Use Proxy
  34. 客户请求的文档应该通过Location头所指明的代理服务器提取。
  35. 306 Unused
  36. 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。
  37. 307 Temporary Redirect
  38. 被请求的页面已经临时移至新的url
  39. 4xx:客户端错误
  40. 400 Bad Request
  41. 服务器未能理解请求。
  42. 401 Unauthorized
  43. 被请求的页面需要用户名和密码。
  44. 401.1
  45. 登录失败。
  46. 401.2
  47. 服务器配置导致登录失败。
  48. 401.3
  49. 由于 ACL 对资源的限制而未获得授权。
  50. 401.4
  51. 筛选器授权失败。
  52. 401.5
  53. ISAPI/CGI 应用程序授权失败。
  54. 401.7
  55. 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
  56. 402 Payment Required
  57. 此代码尚无法使用。
  58. 403 Forbidden
  59. 对被请求页面的访问被禁止。
  60. 403.1
  61. 执行访问被禁止。
  62. 403.2
  63. 读访问被禁止。
  64. 403.3
  65. 写访问被禁止。
  66. 403.4
  67. 要求 SSL
  68. 403.5
  69. 要求 SSL 128
  70. 403.6
  71. IP 地址被拒绝。
  72. 403.7
  73. 要求客户端证书。
  74. 403.8
  75. 站点访问被拒绝。
  76. 403.9
  77. 用户数过多。
  78. 403.10
  79. 配置无效。
  80. 403.11
  81. 密码更改。
  82. 403.12
  83. 拒绝访问映射表。
  84. 403.13
  85. 客户端证书被吊销。
  86. 403.14
  87. 拒绝目录列表。
  88. 403.15
  89. 超出客户端访问许可。
  90. 403.16
  91. 客户端证书不受信任或无效。
  92. 403.17
  93. 客户端证书已过期或尚未生效。
  94. 403.18
  95. 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
  96. 403.19
  97. 不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
  98. 403.20
  99. Passport 登录失败。这个错误代码为 IIS 6.0 所专用。
  100. 404 Not Found
  101. 服务器无法找到被请求的页面。
  102. 404.0
  103. 没有找到文件或目录。
  104. 404.1
  105. 无法在所请求的端口上访问 Web 站点。
  106. 404.2
  107. Web 服务扩展锁定策略阻止本请求。
  108. 404.3
  109. MIME 映射策略阻止本请求。
  110. 405 Method Not Allowed
  111. 请求中指定的方法不被允许。
  112. 406 Not Acceptable
  113. 服务器生成的响应无法被客户端所接受。
  114. 407 Proxy Authentication Required
  115. 用户必须首先使用代理服务器进行验证,这样请求才会被处理。
  116. 408 Request Timeout
  117. 请求超出了服务器的等待时间。
  118. 409 Conflict
  119. 由于冲突,请求无法被完成。
  120. 410 Gone
  121. 被请求的页面不可用。
  122. 411 Length Required
  123. "Content-Length" 未被定义。如果无此内容,服务器不会接受请求。
  124. 412 Precondition Failed
  125. 请求中的前提条件被服务器评估为失败。
  126. 413 Request Entity Too Large
  127. 由于所请求的实体的太大,服务器不会接受请求。
  128. 414 Request-url Too Long
  129. 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。
  130. 415 Unsupported Media Type
  131. 由于媒介类型不被支持,服务器不会接受请求。
  132. 416 Requested Range Not Satisfiable
  133. 服务器不能满足客户在请求中指定的Range头。
  134. 417 Expectation Failed
  135. 执行失败。
  136. 423
  137. 锁定的错误。
  138. 5xx:服务器错误
  139. 500 Internal Server Error
  140. 请求未完成。服务器遇到不可预知的情况。
  141. 500.12
  142. 应用程序正忙于在 Web 服务器上重新启动。
  143. 500.13
  144. Web 服务器太忙。
  145. 500.15
  146. 不允许直接请求 Global.asa
  147. 500.16
  148. UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
  149. 500.18
  150. URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
  151. 500.100
  152. 内部 ASP 错误。
  153. 501 Not Implemented
  154. 请求未完成。服务器不支持所请求的功能。
  155. 502 Bad Gateway
  156. 请求未完成。服务器从上游服务器收到一个无效的响应。
  157. 502.1
  158. CGI 应用程序超时。 ·
  159. 502.2
  160. CGI 应用程序出错。
  161. 503 Service Unavailable
  162. 请求未完成。服务器临时过载或当机。
  163. 504 Gateway Timeout
  164. 网关超时。
  165. 505 HTTP Version Not Supported
  166. 服务器不支持请求中指明的HTTP协议版本

3 抓包工具fiddler

(1) 配置https

  1. 点击Tools-->options--->https--->选中面板下
  2. Capture Https CONNECTS
  3. Decrypt Https Traffic
  4. Ignore
  5. 复选框后,将Fiddler重启即可

(2) Web Session 面板

主要是Fiddler抓取到的每条http请求(每条称一个session),主要包含了请求的url,协议,状态码,body等信息

(3) 数据统计版

Inspector

  1. ImageView标签: JPG 格式使用 ImageView 就可以看到图片
  2. TextView 标签: HTML/JS/CSS 使用 TextView 可以看到响应的内容。
  3. Raw标签: Raw标签可以查看响应报文和响应正文,但是不包含请求报文
  4. Cookies标签: Cookies标签可以看到请求的cookie和响应的set-cookie头信息。
  5. WebForms: post请求所有表单数据
  6. Headers: 请求头和响应头信息
  7. Json\XML: JsonXML格式的数据

其他面板

  1. Statistics面板 HTTP请求的性能和其他数据分析
  2. composer面板 可以模拟向相应的服务器发送数据的过程
  3. Filters面板 Filter标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http 请求而只抓取internethttp请求,或则过滤相应域名的http请求。
  4. WebSession选择功能
  5. select json\html\image
  6. cls清除所有请求
  7. ?xxx搜索

4 Urllib库

(1)版本

  1. python2
  2. urllib
  3. urllib2
  4. python3
  5. urllib
  6. urllib2 官方文档:https://docs.python.org/2/library/urllib2.html
  7. urllib2 源码:https://hg.python.org/cpython/file/2.7/Lib/urllib2.py
  8. urllib2 python3.x 中被改为urllib.request
  9. 字节-->字符串 解码decode
  10. 字符串-->字节 编码encode

(2)常见的命令

请求响应

  1. urllib.request.urlopen() 返回一个response对象
  2. urllib.request.urlretrieve() 读取内容,直接保存到本地 图片/视频/网页
  3. response.read() 读取二进制数据
  4. response.readline() 读取一行
  5. response.readlines() 读取多行
  6. response.getcode() 获取状态码
  7. response.geturl() 获取请求对象l是由哪个url返回来的
  8. response.getheaders() 获得请求头信息

处理URL

  1. urllib.parse.urlencode() 把字典对象解析成url可识别的参数字符串
  2. #例如
  3. url = 'https://www.baidu.com/s?'
  4. data = {
  5. 'wd':'美女'
  6. }
  7. source = urllib.parse.urlencode(data)
  8. url = url+source
  9. print(url)
  10. urllib.parse.quote() url编码中只能出现-_.a~z 如果有中文需要进行编码
  11. #例如
  12. url在线编码工具
  13. http://tool.oschina.net/encode?type=4
  14. url = urllib.pares.quote('http://www.baidu.com/user=语言&pass=123')
  15. urllib.parse.unquote() url解码

构建请求对象

  1. User-Agent定制 urllib.request.Request 可以使用这个类来定制一个请求对象,来模拟浏览器登录
  2. #模拟请求头
  3. headers = {
  4. 'User-Agent':'xxxxx'
  5. }
  6. request = urllib.request.Request(url=url,headers=headers)
  7. response = urllib.request.urlopen(request)
  8. print(response.read().decode())

爬虫入门之urllib库(一)的更多相关文章

  1. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  2. Python爬虫入门之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  3. Python爬虫入门之Urllib库的基本使用

    那么接下来,小伙伴们就一起和我真正迈向我们的爬虫之路吧. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解 ...

  4. Python爬虫入门:Urllib库的基本使用

    1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CS ...

  5. 芝麻HTTP:Python爬虫入门之Urllib库的基本使用

    1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS.CSS ...

  6. Python爬虫入门:Urllib库的高级使用

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  7. 芝麻HTTP: Python爬虫入门之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  8. 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

  9. 第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

    第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解 封装模块 #!/usr/bin/env python # -*- coding: utf- ...

随机推荐

  1. webpack 4.0 安装出现的小问题 (One CLI for webpack must be installed)

    安装的webpack版本是4.11.0,运行命令npm start 提示:One CLI for webpack must be installed. These are recommended ch ...

  2. PHPExcel 读取的几个例子

    1.使用 PHPExcel_IOFactory 读取文件 $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); 2.使用一个特定的读取类,读 ...

  3. [转] 配置文件解析利器-Config库

    [From] https://blog.csdn.net/zero__007/article/details/51493851 Typesafe的Config库,纯Java写成.零外部依赖.代码精简. ...

  4. ELK 插件(一) ---- head

    一, 插件介绍 01, ElasticSearch Head是什么? ElasticSearch Head是集群管理.数据可视化.增删查改.查询语句可视化工具.可以对集群进行傻瓜式操作.你可以通过插件 ...

  5. DP Intro - Tree DP

    二叉苹果树 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点 ...

  6. HDFS基本工具类的实现

    package com.shikun.HdfsTool;import java.io.File;import java.io.IOException;import java.net.URI;impor ...

  7. AutoFac之 Named and Keyed 方式注入

    AutoFac是.net framework下一个高效的ioc容器,传说中的效率最快(我偷偷看了几篇测试博文,确实这个容器的效率遥遥领先). 好了废话不多说,AutoFac的使用方式请看:http:/ ...

  8. WEB 倒计时

    <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans ...

  9. TOJ 2926 Series

    Description An arithmetic series consists of a sequence of terms such that each term minus its immed ...

  10. flex buider 4.6 打开设计模式(designer)时提示内存不足错误的解决办法

    先申明,此方法只适用于flex builder 4.6及以下版本, flex builder 4.7以后已经完全取消了designer功能,是没有办法补救的. 1. 首先下载APE文件,这个文件好像是 ...