爬虫详细教程第1天

爬虫详细教程第一天

  • 1.爬虫概述
    • 1.1什么是爬虫?
    • 1.2爬虫工具——Python
    • 1.3爬虫合法吗?
    • 1.4爬虫的矛与盾
      • 1.4.1反爬机制
      • 1.4.2反爬策略
      • 1.4.3robots.txt协议
  • 2.爬虫使用的软件
    • 2.1使用的开发工具:
  • 3.第一个爬虫
  • 4.web请求
    • 4.1讲解一下web请求的全部过程
    • 4.2页面渲染数据
      • 4.2.1. 服务器渲染
      • 4.2.2. 前端JS渲染
  • 5.HTTP协议
    • 5.1请求:
    • 5.2响应:
    • 5.3请求方式
  • 6.requests模块
    • 6.1. 抓取百度翻译数据
    • 6.2: 抓取豆瓣电影

各位小伙伴想要博客相关资料的话,关注公众号:chuanyeTry即可领取相关资料!

1.爬虫概述

1.1什么是爬虫?

爬虫就是通过编写程序来爬取互联网上的优秀资源(图片、音频、视频、数据)

1.2爬虫工具——Python

Python上手速度最快,语法最简单。更重要的是,有非常多的关于爬虫功能的第三方支持库。

1.3爬虫合法吗?

爬虫在法律上是不被禁止的。这就是法律是允许爬虫存在的。

但是爬虫不能影响网站的正常运营(抢票, 秒杀, 疯狂solo网站资源
造成网站宕机)。我们还是要安分守己。时常优化自己的爬虫程序
避免干扰网站的正常运行。并且在使用爬取到的数据时,发现涉及
对用户隐私和商业机密等敏感内容时,一定要及时终止爬取和传播

1.4爬虫的矛与盾

1.4.1反爬机制

网站可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。

1.4.2反爬策略

爬虫程序可以通过制定相关的策略或者技术手段,破解网站中配备的反爬机制,从而可以获取⻔户网站中相关的数据据。

1.4.3robots.txt协议

robots.txt协议:规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。
在这里插入图片描述

2.爬虫使用的软件

2.1使用的开发工具:

  • python 3.8 (尽量不要用最新版的python)
  • pycharm

3.第一个爬虫

首先,回顾一下爬虫的概念. 爬虫就是我们通过我们写的程序去抓取互联网上的数据资源. 比如, 需要百度的资源.我们打开浏览器, 然后输入百度的网址,紧接着, 我们就能在浏览器上看到百度的内容了. 那换成爬虫呢? 其实道理是一样的. 只不过, 我们需要用代码来模拟一个浏览器, 然后同样的输入百度的网址. 那么我们的程序应该也能拿到百度的内容.

#在python中, 我们可以直接用urllib模块来完成对浏览器的模拟工作~,
from urllib.request import urlopen
resp = urlopen("http://www.baidu.com") # 打开百度
print(resp.read().decode("utf-8")) # 打印抓取到的内容
resp.close#关闭文档

我们可以把抓取到的html内容全部写入到文件中, 然后和原版的百度
进行对比, 看看是否一致

from urllib.request import urlopen
resp = urlopen("http://www.baidu.com") # 打开百度
#print(resp.read().decode("utf-8")) # 打印抓取到
的内容
with open("baidu.html",mode="w", encoding="utf-8") as f: # 创建文件
f.write(resp.read().decode("utf-8")) # 保存在文件中
resp.close#关闭文档

4.web请求

4.1讲解一下web请求的全部过程

以百度为例. 在访问百度的时候, 浏览器会把这一次请求发送到百度的服务器(百度的一台电脑), 由服务器接收到这个请求, 然后加载一些数据. 返回给浏览器, 再由浏览器进行显示. 这里蕴含着一个极为重要的东⻄在里面, 注意, 百度的服务器返回给浏览器的不直接是⻚面, 而是⻚面源代码(由html, css, js组成). 由浏览器把⻚面源代码进行执行, 然后把执行之后的结果展示
给用户. 所以我们能看到页面的内容中,我们拿到的是百度的源代码具体过程如图.
在这里插入图片描述

4.2页面渲染数据

并非所有的数据都在⻚面源代码里,一个新的概念那就是⻚面渲染数据的过程, 我们常⻅的⻚面渲染过程有两种,

4.2.1. 服务器渲染

在请求到服务器的时候, 服务器直接把数据全部写入到html中, 我们浏览器就能直接拿到带有数据的html内容.
这种网⻚一般都相对比较容易就能抓取到⻚面内容.

4.2.2. 前端JS渲染

第一次请求服务器返回一堆HTML框架结构. 然后再次请求到真正保存数据的服务器, 由这个服务器返回数据, 最后在浏览器上对数据进行加载.

这样做的好处是服务器那边能缓解压力. 而且分工明确. 比较容
易维护.

那数据是何时加载进来的呢?

我们进行⻚面向下滚动的时候, jd就在偷偷的加载数据了, 此时想要看到这个⻚面的加载全过程, 我们就需要借助浏览器的调试工具了(F12)

5.HTTP协议

  • 协议: 就是两个计算机之间为了能够流畅的进行沟通而设置的一个君子协定. 常⻅的协议有TCP/IP. SOAP协议, HTTP协议, SMTP协议等

  • HTTP协议, Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议. 就是浏览器和服务器之间的数据交互遵守的就是HTTP协议.

HTTP协议把一条消息分为三大块内容. 无论是请求还是响应都是三
块内容

5.1请求:

请求行 -> 请求方式(get/post) 请求url地址 协议
请求头 -> 放一些服务器要使用的附加信息
请求体 -> 一般放一些请求参数

5.2响应:

状态行 -> 协议 状态码
响应头 -> 放一些客户端要使用的一些附加信息
响应体 -> 服务器返回的真正客户端要用的内容(HTML,json)等

请求头中最常⻅的一些重要内容(爬虫需要):

  • User-Agent : 请求载体的身份标识(用啥发送的请求)
  • Referer: 防盗链(这次请求是从哪个⻚面来的? 反爬会用到)
  • cookie: 本地字符串数据信息(用户登录信息, 反爬的token)
    响应头中一些重要的内容:

cookie: 本地字符串数据信息(用户登录信息, 反爬的token)

5.3请求方式

  • GET: 显示提交
  • POST: 隐示提交

6.requests模块

常用的抓取⻚面的模块通常使用第三方模块requests.既然是第三方模块, 那就需要我们对该模块进行安装, 安装方法:

pip install requests

6.1. 抓取百度翻译数据

kw = input("请输入你要翻译的英语单词:")
dic = {
"kw": kw # 这里要和抓包工具里的参数一致.
}
resp =
requests.post("https://fanyi.baidu.com/sug",
data=dic)
#返回值是json 那就可以直接解析成json
resp_json = resp.json()
#{"errno': 0, 'data': [{'k': 'Apple', 'v': 'n.苹果公司,原称苹果电脑公司'....
print(resp_json['data'][ 0 ]['v']) # 拿到返回字典中的内容
resp.close

在这里插入图片描述

6.2: 抓取豆瓣电影

url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type': '24',
'interval_id': '100:90',
'action':'',
'start': '0',#从库中的第几部电影去取
'limit': '20',#一次取出的个数
}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
response =
requests.get(url=url,params=param,headers=headers
)
list_data = response.json()
fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
print('over!!!')
response.close

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

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

相关文章

SaaS版Java基层健康卫生云HIS信息管理平台源码(springboot)

云his系统源码,系统采用主流成熟技术开发,B/S架构,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问,前后端分离,多服务协同,服务可拆分,功能易扩展。多集团统一登录…

二手房交易流程及避坑指南

文章目录 一、写作目的二、主要流程1、查档2、签定金合同3、网签4、交首付5、解押过户6、出产证7、拿房款8、交房 一、写作目的 近几个月房价一直跌跌不休,对于投资客来说这段时间肯定不好过,但这段时间也正是置换房子的好时候,在这次的房产…

病理HE学习贴(自备)

目录 正常结构 癌症HE 在线学习 以胃癌的学习为例 正常结构 1:胃粘膜正常结构和细胞分化 ●表面覆盖小凹上皮细胞(主要标志物:MUC5AC)以保护黏膜。 ●胃底腺固有腺体由黏液颈细胞(MUC6)、主细胞(Pepsinogen l)和壁细胞(Proton pump α-subunit)组…

计算机网络【DHCP动态主机配置协议】

DHCP 出现 电脑或手机需要 IP 地址才能上网。大刘有两台电脑和两台手机,小美有一台笔记本电脑、一台平板电脑和两台手机,老王、阿丽、敏敏也有几台终端设备。如果为每台设备手动配置 IP 地址,那会非常繁琐,一点儿也不方便。特别是…

【形式语言与自动机/编译原理】CFG->Greibach->NPDA(1)

本文将详细讲解《形式语言与自动机》(研究生课程)或《编译原理》(本科生课程)中的上下文无关文法(CFG)转换成Greibach范式,再转成下推自动机(NPDA)识别语言是否可以被接受…

ES6之迭代器(Iterator)

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

12.29_黑马数据结构与算法笔记Java

目录 305 旅行商问题 动态规划 实现2 306 旅行商问题 动态规划 实现3 307 分治 概述 308 快速选择算法 分治 309 快速选择算法 数组第k大数 Leetcode215 310 快速选择算法 数组中位数 311 快速幂 分治 312 快速幂 Leetcode50 313 平方根整数部分 Leetcode69-1 314 平方…

阿里云PolarDB数据库优惠价格表11元一天起

阿里云数据库PolarDB租用价格表,云数据库PolarDB MySQL版2核4GB(通用)、2个节点、60 GB存储空间55元5天,云数据库 PolarDB 分布式版标准版2核16G(通用)57.6元3天,阿里云百科aliyunbaike.com分享…

《Python机器学习原理与算法实现》学习笔记

以下为《Python机器学习原理与算法实现》(杨维忠 张甜 著 2023年2月新书 清华大学出版社)的学习笔记。 根据输入数据是否具有“响应变量”信息,机器学习被分为“监督式学习”和“非监督式学习”。 “监督式学习”即输入数据中即有X变量&…

ros2查看launch文件内需要提供的参数(接口):

格式:ros2 launch --show-args 包名称 launch文件名称 例如: ros2 launch --show-args ros_gz_sim gz_sim.python.py

区块链的三难困境是什么,如何解决?

人们需要保持社交、工作和睡眠之间的平衡,并且努力和谐相处。同样的概念也反映在区块链的三难困境中。 区块链三难困境是一个术语,指的是现有区块链的局限性:可扩展性、安全性和去中心化。这是一个存在了几十年的设计问题,其问题的…

【python高级用法】迭代器、生成器、装饰器、闭包

迭代器 可迭代对象:可以使用for循环来遍历的,可以使用isinstance()来测试。 迭代器:同时实现了__iter__()方法和__next__()方法,可以使用isinstance()方法来测试是否是迭代器对象 from collections.abc import Iterable, Iterat…

Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

将下发的ds_db01.sql数据库文件放置mysql中 12、编写Scala代码,使用Spark将MySQL的ds_db01库中表user_info的全量数据抽取到Hive的ods库中表user_info。字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String&am…

人工智能的第一性原理

今天跟大家分享一篇 北师大 - 图像处理研究中心主任 郭平教授的一篇文章 通过“四个问题”, 解释了人工智能的第一性原理 提出了如何运用第一性原理思维 来解决人工智能缺乏基本常识的问题 并且他建议将最小作用量原理 作为人工智能的第一性原理 什么是第一…

排序算法讲解

1)排序思想: 2)排序代码: 3)注意点: 4)时间/空间复杂度和稳定性 下面的排序是以实现升序讲解的。 (一)直接插入排序 1)排序思想: 把待排序的…

【c语言】飞机大战2

1.优化边界问题 之前视频中当使用drawAlpha函数时,是为了去除飞机后面变透明,当时当飞机到达边界的时候,会出现异常退出,这是因为drawAlpha函数不稳定,昨天试过制作掩码图,下载了一个ps,改的话&#xff0c…

centos7安装nginx并安装部署前端

目录: 一、安装nginx第一种方式(外网)第二种方式(内网) 二、配置前端项目三、Nginx相关命令 好久不用再次使用生疏,这次记录一下 一、安装nginx 第一种方式(外网) 1、下载nginx ng…

Jenkins基础教程

目录 第一章、快速了解Jenkins1.1)Jenkins中一些概念介绍1.2)Jenkins和maven用途上的区别1.3)为什么使用Jenkins1.4)学习过程中的疑问 第二章、安装Jenkins2.1)安装之前的准备2.2)Windows中Jenkins下载安装…

DrGraph原理示教 - OpenCV 4 功能 - 单通道图

通道 OpenCV的核心处理对象是Mat,大体是一个二维数组,加上了各种功能函数。 很多的图像处理,会在单通道或二值化的基础上进行,比如连通域、目标识别等。这里的通道就是channels。 不同的图像处理算法可能对通道数有特定的要求。例…

计算机组成原理复习6

总线结构与控制练习题 计算机系统为什么采用总线结构? 解析:在冯诺依曼计算机体系当中,把计算机基本组成分成了五大部分。运算器,控制器,存储器,输入设备和输出设备。我们可以把运算器和控制器制作在一个芯…
最新文章