爬虫介绍

659次阅读
没有评论
爬虫介绍

爬虫

百度百科

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
只要浏览器能够做的事情,原则上,爬虫都能够做到。

简单来说,爬虫就是自动从网络上收集信息的一种程序,复杂点来说,就是一整套关于数据请求、处理、存储的程序。

原理

发送请求 -> 接收响应 -> 解析网页 (-> 提取链接 -> 发送请求) -> 提取资源 -> 保存资源

发送请求

实质是模拟浏览器发送 http 请求报文的过程,实际中只需要请求服务器需要的部分报文。

请求库

模拟浏览器的请求

  • requests 爬虫最常用的库
    比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)。

  • urllib
    提供了一系列用于操作URL的功能。

  • 请求报文

    请求行、请求头、空行、请求体
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SBm9ugRo-1579768800332)(./assets/request-message.jpg#pic_center)]

    使用Fiddler抓取http请求(抓包)

    一个完整的 http 请求报文

    POST http://columbus.os.adc.com/api/coop/requirement/tree/query/prune/page?projectId=100001 HTTP/1.1 Host: columbus.os.adc.com Connection: keep-alive Content-Length: 483 Accept: application/json, text/plain, */* Origin: http://columbus.os.adc.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0 Content-Type: application/json;charset=UTF-8;multipart/form-data Referer: http://columbus.os.adc.com/requirement/list?projectId=100001 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: SESSION=1e365567-bbed-4ff8-b033-6ab21dc05bd2; user=W9005349

    {"projectId":"100001","title":"","assignUsers":[],"isArchived":-1}

    请求行

    请求方法 + 空格 +请求URL + 空格 + HTTP协议版本 + 回车 换行

    请求头

    请求的配置信息,key-value 形式发送给服务器

    Accept: 浏览器可接受的MIME类型。
    Accept-Charset:浏览器可接受的字符集。
    Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip 的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
    Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
    Content-Length:表示请求消息正文的长度。
    Host: 客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
    If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304“Not Modified”应答。
    Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)。包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
    User-Agent:User-Agent头域的内容包含发出请求的用户信息。浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
    Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。
    Cookie2:用来说明请求端支持的cookie版本。
    Range:如果服务器支持范围请求,就请求资源的指定范围。

    空行

    通过空行告诉服务器请求头部结束。

    请求体

    根据不同的请求方法包含不同的内容。
    get: 空
    post: 表单数据

    接收响应

    获取特定请求返回的响应报文,提取目标数据。

    响应报文

    响应行、响应头、空行、响应体
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NXRBMhIU-1579768800338)(./assets/response-message.jpg#pic_center)]

    一个完整的 http 响应报文

    HTTP/1.1 200 Server: nginx/1.12.2 Date: Thu, 23 Jan 2020 02:03:03 GMT Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive trace-id: 15-32349ee9-8945-438c-91a6-33ff10c0c0ee-18882 X-Content-Encoding-Over-Network: gzip

    77 {"status":200,"msg":null,"data":{"result":[],"pageInfo":{"totalPages":0,"totalRecords":0,"pageNumber":1,"pageSize":5}}} 0

    响应行

    http协议版本 + 空格 + 状态码 + 空格 + 状态码描述 + 回车 换行

    http状态码

  • 100~199:信息,服务器收到请求,需要请求者继续执行操作

  • 200~299:成功,操作被成功接收并处理

  • 300~399:重定向,需要进一步的操作以完成请求

  • 400~499:客户端错误,请求包含语法错误或无法完成请求

  • 500~599:服务器错误,服务器在处理请求的过程中发生错误

  • 响应头

    描述服务器和数据的基本信息。

    Set-Cookie:设置浏览器 Cookie,以后当浏览器访问符合条件的 URL 时,会自动带上该 Cooike
    Refresh:告诉浏览器隔多久刷新一次,以秒计

    空行

    响应头结束

    响应体

    网站返回的数据

    解析网页

  • 提取网页链接

  • 提取网页资源

  • 解析库

    源码中找到并提取数据

  • Beautiful Soup
    Beautiful Soup 是 python 的一个库,其最主要的功能是从网页中抓取数据。

  • pyquery
    据说比beautiful 好用,语法和jquery非常像。

  • 爬虫开源框架

  • scrapy:是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

  • nutch: 是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。

  • 商业场景

  • 搜索引擎
    百度、谷歌搜索就是一个巨大的爬虫程序。

  • 爬取新闻 新闻门户网站的新闻共享
    比如说今日头条、一点新闻、腾讯新闻等等。他们的新闻来源,一个当然是从自己的记者这里产生,另一部分呢,就是从其他网站上,爬下来他们的记者写的文章。这样才能够做到新闻的门户级别。一个网站报道了一个新闻,其他的网站马上会给你推送相同的新闻了。这中间就是爬虫在起作用,如果是人去找新闻,不仅速度慢,还可能会重复,而且不能24小时工作。这当然就很不方便了。

  • 为机器学习,大数据做准备
    机器学习基于海量的数据样本,比如人脸识别,图像识别,语音识别,只有对大量的样本数据进行分析,才能提升程序的识别准确度。至于大数据分析更是基于海量数据,所以爬虫就是获取数据的一种途径。

  • 个人用途

  • 分析喜欢妹子的朋友圈hh

  • 找工作时爬取招聘网站某工种的所有招聘信息

  • 神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

    相关文章:

    版权声明:Python教程2022-10-24发表,共计3406字。
    新手QQ群:570568346,欢迎进群讨论 Python51学习