从零开始:一步步学习爬虫技术的实用指南(一)

从零开始:一步步学习爬虫技术的实用指南(一)


Urllib

1.什么是互联网爬虫

如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据

c 复制代码
解释1:通过一个程序 ,根据Url(http://www.taobao.com)进行爬取网页,获取有用信息
解释2:使用程序模拟浏览器,去向服务器发送请求,获取响应信息

2.爬虫核心
c 复制代码
1.爬取网页:爬取整个网页 包含了网页中所有得内容
2.解析数据:将网页中你得到的数据 进行解析
3.难点:爬虫和反爬虫之间的博弈

3.爬虫的用途
  • 数据分析/人工数据集
  • 社交软件冷启动
  • 舆情监控
  • 竞争对手监控

4.爬虫的分类
4.1 通用爬虫:

实例
百度、360、google、sougou等搜索引擎‐‐‐伯乐在线

功能
访问网页‐>抓取数据‐>数据存储‐>数据处理‐>提供检索服务

robots协议
一个约定俗成的协议,添加robots.txt文件,来说明本网站哪些内容不可以被抓取,起不到限制作用 自己写的爬虫无需遵守

网站排名(SEO)

  1. 根据pagerank算法值进行排名(参考个网站流量、点击率等指标)
  2. 百度竞价排名

缺点

  1. 抓取的数据大多是无用的
  2. 不能根据用户的需求来精准获取数据

4.1 聚焦爬虫:

功能
根据需求,实现爬虫程序,抓取需要的数据

设计思路

  1. 确定要爬取的url

    如何获取Url

  2. List item

    模拟浏览器通过http协议访问url,获取服务器返回的html代码

    如何访问

  3. 解析html字符串(根据一定规则提取需要的数据)

    如何解析


5.反爬手段
5.1 User‐Agent:

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版

本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

5.2.代理IP

西次代理

快代理

什么是高匿名、匿名和透明代理?它们有什么区别?

1.使用透明代理,对方服务器可以知道你使用了代理,并且也知道你的真实IP。

2.使用匿名代理,对方服务器可以知道你使用了代理,但不知道你的真实IP。

3.使用高匿名代理,对方服务器不知道你使用了代理,更不知道你的真实IP。

5.3.验证码访问

打码平台

云打码平台

超级🦅

5.4.动态加载网页 网站返回的是js数据 并不是网页的真实数据

selenium驱动真实的浏览器发送请求

5.5.数据加密

分析js代码


6.urllib库使用
c 复制代码
urllib.request.urlopen() 模拟浏览器向服务器发送请求
response 服务器返回的数据
response的数据类型是HttpResponse
字节‐‐>字符串
解码decode
字符串‐‐>字节
编码encode
read() 字节形式读取二进制 扩展:rede(5)返回前几个字节
readline() 读取一行
readlines() 一行一行读取 直至结束
getcode() 获取状态码
geturl() 获取url
getheaders() 获取headers
urllib.request.urlretrieve()
请求网页
请求图片
请求视频

7.请求对象的定制
c 复制代码
UA介绍:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统
及版本、CPU 类型、浏览器及版本。浏览器内核、浏览器渲染引擎、浏览器语言、浏览器插件等
语法:request = urllib.request.Request()

扩展:编码的由来

'''编码集的演变‐‐‐

由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,

这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。

但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,

所以,中国制定了GB2312编码,用来把中文编进去。

你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc‐kr里,

各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。

现代操作系统和大多数编程语言都直接支持Unicode。''


相关推荐
Nu11PointerException2 小时前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
全栈开发圈5 小时前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
小白学大数据5 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
@小博的博客5 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
南宫生6 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
ac-er88886 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
懒惰才能让科技进步6 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
love_and_hope7 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen7 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)7 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习