python-10(爬虫)

1.网络爬虫

1.1.引言

我们平时都说Python爬虫,其实这里可能有个误解,爬虫并不是Python独有的,可以做爬虫的语言有很多例如:PHP、JAVA、C#、C++、Python。

为什么Python的爬虫技术会异军突起呢?

Python火并不是因为爬虫技术,而是AI人工智能、数据分析(GoogleAlphaGo)等等功能;这些Java其实也能做,而选择Python做爬虫是因为Python相对来说比较简单,而且功能比较齐全。

1.2.什么是网络爬虫

网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。通俗来讲,网络爬虫就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。

原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。

1.3.为什么要学习网络爬虫

互联网大数据时代,给予我们的是生活的便利以及海量数据爆炸式的出现在网络中。过去,我们通过书籍、报纸、电视、广播或许信息,这些信息数量有限,且是经过一定的筛选,信息相对而言比较有效,但是缺点则是信息面太过于狭窄了。不对称的信息传导,以致于我们视野受限,无法了解到更多的信息和知识。 互联网大数据时代,我们突然间,信息获取自由了,我们得到了海量的信息,但是大多数都是无效的垃圾信息。 例如新浪微博,一天产生数亿条的状态更新,而在百度搜索引擎中,随意搜一条就有成千上百万条信息。 在如此海量的信息碎片中,我们如何获取对自己有用的信息呢? 答案是筛选! 通过某项技术将相关的内容收集起来,在分析删选才能得到我们真正需要的信息。 这个信息收集分析整合的工作,可应用的范畴非常的广泛,无论是生活服务、出行旅行、金融投资、各类制造业的产品市场需求等等……都能够借助这个技术获取更精准有效的信息加以利用。 网络爬虫技术,虽说有个诡异的名字,让能第一反应是那种软软的蠕动的生物,但它却是一个可以在虚拟世界里,无往不前的利器。

浏览网站时所能看见的数据都可以通过爬虫程序保存下来,例如:文字、图片、音频和视频。

1.4.应用场景

  • 数据展示:将爬取的数据展示到网页或者APP上,比如:百度新闻、今日头条

  • 数据分析:从数据中寻找一些规律,比如:慢慢买(价格对比)、TIOBE排行等

  • 自动化测试:比如想要测试一个前端页面的兼容性、前端页面UI是否有bug,只需要模拟执行表单提交、键盘输入等页面操作

1.5.网络爬虫是否合法

爬虫作为一种计算机技术就决定了它的中立性,因此爬虫本身在法律上并不被禁止,但是利用爬虫技术获取数据这一行为是具有违法甚至是犯罪的风险的。所谓具体问题具体分析,正如水果刀本身在法律上并不被禁止使用,但是用来捅人,就不被法律所容忍了。

1.5.1.爬虫技术与反爬虫技术

爬虫目前能造成的技术上影响在于野蛮爬取,即多线程爬取,从而导致网站瘫痪或不能访问,这也是大多数网络攻击所使用的方法之一。

由于爬虫会批量访问网站,因此许多网站会采取反爬措施。例如:1.IP频率、流量限制;2.请求时间窗口过滤统计;3.识别爬虫等。

但这些手段都无法阻止爬虫开发人员优化代码、使用多IP池等方式规避反爬措施,实现大批量的数据抓取。由于网络爬虫会根据特定的条件访问页面,因而爬虫的使用将占用被访问网站的网络带宽并增加网络服务器的处理开销,甚至无法正常提供服务。

1.5.2.Robots协议

robots(也称为爬虫协议、机器人协议等)称是“网络爬虫排除标准”是网站跟爬虫间的一种协议(国际互联网界通行的道德规范),用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。

参考地址:https://www.zhihu.com/robots.txt

  • 以Allow开头的URL地址:允许某爬虫引擎访问

  • 以Disallow开头的URL地址:不允许某爬虫引擎访问

总之,盗亦有道,君子之约。

1.6.网络爬虫步骤及相关技术

2.抓包

  • 浏览器抓包(仅能抓取浏览器的数据包

  • 抓包工具fiddler(基本用于抓取HTTP

3.HTTP与HTTPS

  • HTTP 与 HTTPS 有哪些区别?

(1)HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

(2)HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

(3) HTTP 的端口号是 80,HTTPS 的端口号是 443。

(4)HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

  • HTTPS 解决了 HTTP 的哪些问题?

HTTP 由于是明文传输,所以安全上存在以下三个风险:

窃听风险,比如通信链路上可以获取通信内容,用户号容易没。

篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。

冒充风险,比如冒充淘宝网站,用户钱容易没。


HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:

信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。

校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾

广告。

身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

可见,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。

  • HTTPS 是如何解决上面的三个风险的?

混合加密的方式实现信息的机密性,解决了窃听的风险。

摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完

整性,解决了篡改的风险。

将服务器公钥放入到数字证书中,解决了冒充的风险。

4.快速入门

4.1.安装requests

pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装和卸载的功能,现在大家用到的所有包不是自带的就是通过pip安装的。Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。

  • 显示版本和路径

pip --version
  • 安装指定版本的requests

pip install requests         # 最新版本
pip install requests==2.11.0 # 指定版本
pip install requests>=2.11.0 # 最小版本

由于所有请求都需要经过fiddler这个抓包软件进出。所以如果requests与fiddler一起使用,请不要使用requests最新版本,不然直接会卡死,降版本使用即可。

也可以直接通过PyCharm来安装requests模块,点击File -> Settings -> 项目: python10,选择Python解释器,点击 + 号,输入选择requests模块并指定安装版本号(例如:2.11.0),最后点击 安装包(I) 按钮即可。

4.2.案例演示

创建纯python项目,新建demo.py并导入requests模块

# 导入模块
import requests
# 通过requests模块模拟发送get请求,并得到响应对象response
resp = requests.get(url)

response响应对象属性介绍:

属性说明
encoding文本编码。例如:resp.encoding="utf-8"
status_code响应状态码。 200 -- 请求成功 4XX -- 客户端错误 5XX -- 服务端响应错误
text响应体。
content字节方式响应体,会自动解码gzip和deflate编码的响应数据
url响应的URL地址。

  • 案例一:快速入门,爬取百度官网并保存到本地

请结合fiddler抓包工具进行以下代码测试。

resp = requests.get("http://www.baidu.com/")

定制请求头headers,请结合知乎网的Robots协议进行设置。伪装User-Agent

resp = requests.get("http://www.zhihu.com/signin?next=%2F",
                    headers={
                        "User-agent": "bingbot"
                    })

定制请求头headers,模拟使用浏览器的User-Agent值。

resp = requests.get("http://www.baidu.com/",
                    headers={
                        "User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
                    })

保存文件的方式可使用pathlibopen等两种方式。

  • 案例二:传递URL参数

POST和GET请求方式在传递URL参数时,稍有不同。

GET方式POST方式
params={"key1":"value1","key2":"value2"}data={"key1":"value1","key2":"value2"}
response=requests.get(url,params=params)response=requests.post(url,data=data)

爬取必应搜索“中国”之后的网页,保存为“中国.html”

resp = requests.get("https://cn.bing.com/search",
                    headers={
                        "User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
                    },
                    params={
                        "q":"中国"
                    })

requests缺点:不能爬取ajax动态加载的数据

  • 案例三:爬取豆瓣电影TOP250,并分页保存文件中

豆瓣TOP250地址:豆瓣电影 Top 250

import time
from pathlib import Path

import requests
url ='https://movie.douban.com/top25'
start=0
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
params = {
    'start':start
}
for i in range(3):
    resp=requests.get(url,headers=headers,params=headers)
    start+=25
    resp.encoding="utf-8"
    with open(f"top{start}.html","w",encoding='utf-8') as fp:
        fp.write(resp.text)
    print(f"正在爬取中,目前第{i+1}页")
    time.sleep(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/645881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

兵器室管控系统|DW-306是一套成熟系统

概述 智慧兵器室管理系统(DW-S306)是依托互3D技术、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 本解决方案利用现有内部网络,部署部队智能兵器室管理系统&#xff…

使用Django框架搭建Web应用

文章目录 简介安装Django创建一个Django项目创建一个Django应用编写视图配置URL运行开发服务器总结与拓展数据库集成管理后台表单处理模板引擎安全性 简介 Django 是一款基于 Python 语言的开源 Web 应用框架,采用了 MVC(模型-视图-控制器)设…

数据库系统原理实验报告6 | 视图

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本: ​ ———— 本次实验使用到的图形化工具:Heidisql ​ 目录 一、实验目的 二、实验内容 1.根据EDUC数…

Matlab中函数或变量 ‘eeglab‘ 无法识别

EEGLAB 没有安装或添加到 MATLAB 路径中: 确保已经安装了 EEGLAB,并且将其添加到 MATLAB 的路径中。您可以通过在 MATLAB 命令窗口中运行 which eeglab 来检查是否能够找到 EEGLAB。 EEGLAB 函数路径设置错误: 如果已经安装了 EEGLAB&#x…

信息系统项目管理师0131:输出(8项目整合管理—8.7监控项目工作—8.7.3输出)

点击查看专栏目录 文章目录 8.7.3 输出8.7.3 输出 工作绩效报告工作绩效信息可以用实体或电子形式加以合并、记录和分发。基于工作绩效信息,以实体或电子形式编制形成工作绩效报告,以制定决策、采取行动或引起关注。根据项目沟通管理计划,通过沟通过程向项目干系人发送工作绩…

Top期刊:针对论文Figure图片的7个改进建议

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 通过对来自细胞生物学、生理学和植物学领域的580篇论文,进行检查和归纳总结,来自德国德累斯顿工业大学的Helena Jambor及合作者,在PLOS Bio…

Linux网络编程:HTTPS协议

目录 1.预备知识 1.1.加密和解密 1.2.常见加密方式 1.2.1.对称加密 1.2.2.非对称加密 ​编辑 1.3.数据摘要(数据指纹)和数据签名 1.4.证书 1.4.1.CA认证 1.4.2.证书和数字签名 2.HTTPS协议 2.1.自行设计HTTPS加密方案 2.1.1.只使用对称加密 …

Linux-组管理和权限管理

1 Liunx组的基本介绍: 在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件都有所有者、所在组、其他组的概念 所有者所在组其它组改变用户所在的组 2 文件/目录的所有者 一般文件的创建者,谁创建了该文件,就…

Selenium 自动化测试工具<2>(Selenium 常用API的使用方法)

文章目录 浏览器操作浏览器最大化设置浏览器的大小浏览器的前进和后退操作浏览器滚动条 键盘事件单个按键用法键盘组合键用法 鼠标事件不同窗口搜索定位一组元素定位多层框架下拉框定位alert、confirm、prompt 的处理上传文件操作自动截屏 继上一篇文章对 Selenium API 的使用&…

【微机原理及接口技术】可编程并行接口芯片8255A

【微机原理及接口技术】可编程并行接口芯片8255A 文章目录 【微机原理及接口技术】可编程并行接口芯片8255A前言一、8255A的内部结构和引脚1.与外设接口(数据端口)2.与处理器接口 二、8255A的工作方式三、8255A的编程1. 写入方式控制字:控制字…

想转行程序员的朋友,有什么想问的在评论区随便问,我知道的都告诉你。

你想转行程序员吗? 我自己是法学院毕业后,通过2年的努力才转行程序员成功的。 我发现对于一个外行来说,找不到一个适合自己的方向,光靠努力在一个新的行业里成功异常艰难。即使你非常努力,但方向错了也会做大量的无用…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件,使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的,需要解析.vue文件,我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

太狠了,凌晨5点面试。。

(关注数据结构和算法,了解更多新知识) 网上看到一网友发文说收到面试邀请,面试时间竟然是早晨5点,这是要猝死的节奏。有的网友说应该是下午 5 点,如果是下午 5 点直接写下午 5 点就行了,或者写 17 点也行,直…

C语言系列文章 | 函数 (共 10209 字)

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 目录 函数的概念库函数自…

从关键新闻和最新技术看AI行业发展(2024.5.6-5.19第二十三期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky的公众号&…

近期阅读论文

Exploring Hybrid Active-Passive RIS-Aided MEC Systems: From the Mode-Switching Perspective abstract 移动边缘计算(MEC)被认为是支持延迟敏感和计算密集型服务的有前途的技术。 然而,随机信道衰落特性导致的低卸载率成为制约MEC性能的…

Java 异步编程——Java内置线程调度器(Executor 框架)

文章目录 Java多线程的两级调度模型Executor 框架Executor 框架的组成概念Executor 框架中任务执行的两个阶段:任务提交和任务执行 在 Java1.5 以前,开发者必须手动实现自己的线程池;从 Java1.5 开始,Java 内部提供了线程池。 在J…

VMware虚拟机如何与主机共享文件夹

本机:WIN10 VMware虚拟机:WIN7 因为每次配置都爱忘记操作,目标是为了在WIN7虚拟机中可以访问本机文件 首先本机操作 新建一个共享文件夹,不带中文目录(最好不要) 点击共享 选择everyone,记得权限"读取和写入" 然后到虚拟机里面 添加一个网络位置 点击浏览,选择网…

C++面向对象程序设计-北京大学-郭炜【课程笔记(十一)】

C面向对象程序设计-北京大学-郭炜【课程笔记(十一)】 1、string(重要知识点)1.2、string的赋值和链接1.3、比较string1.4、子串1.5、交换string1.6、寻找string中的字符1.7、删除string中的字符1.8、替换string中的字符1.9、在str…

【C++】---多态

【C】---多态 一、多态的概念二、多态的定义及实现1、构成多态的2个必要条件2、什么叫做虚函数的重写?3、虚函数重写的3个例外4、建议把 析构函数 都定义为:虚函数 三、C11的两个关键字:final override1、final:修饰虚函数&#x…