ITPub博客

首页 > 应用开发 > Python > python爬虫--1

python爬虫--1

原创 Python 作者:张三李四 时间:2021-01-27 15:15:55 0 删除 编辑
1、爬虫基本概念
(1) 爬虫定义
网络爬虫是一种按照一定的规则,自动地抓取万维网的信息的程序或者脚本。
另一种说法:Python编写的程序或者脚本模拟浏览器对服务器发出请求。
(2)爬虫分类
通用爬虫:
通用网络爬虫是搜索引擎抓取系统(百度,谷歌等)的重要组成部分。主要目的是将互联网上的网 页下载到本地,形成一个互联网内容的镜像备份。
通用爬虫整体将页面爬取下来,不做内容筛选
搜索引擎使用通用爬虫将页面爬取下来,做内容的筛选
去除图片,去除广告,只留下文字
聚焦爬虫:
聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
2、get和post的区别?
get(获取) --->> 从服务器获取数据 --->> 获取什么?通过请求的参数来作为数据获取的条件 --->>  参数是拼接到url?后面的键值对 --->>参数不安全,大小受限。
post(提交) --->> 向服务器提交数据 --->> 提交的数据放在请求的请求实体  --->>  安全,大小不受限
3、cookie和session的联系和区别是什么?
1. cookie和sess的定义:
cookie:服务器用于保存用户身份信息,进行会话跟踪,保存在本地的数据。
session:原来的含义是有始有终的一系列动作。在web中表示用于识别用户身份,保 存在服务器端的数据。
2. 产生的原因:
http协议是一个无状态协议,进而产生了cookie和session这两种技术配合使用来保持状态。
3. cookie原理:
当用户第一次登录时,在服务器产生,下发给客户端,进而保存在本地。当下一次该用户登录时,就会附带该cookie信息,进而可以识别用户。
cookie有两个缺陷:
不安全
大小受限
4. session的原理
由于cookie的两个缺陷,进而产生了session。session保存在服务器所以安全,而且大小不受限。所以服务器保存的session想要和用户做对应,还需要cookie作为桥梁。在cookie中会有session的身份信息,用户识别当前用户和服务器那条session做对应
4、常见的元字符
^ 匹配行首
? 重复匹配0次或者1次
* 重复匹配0次或者更多次
+ 重复匹配一次或者更多
. 匹配除了换行符的任意一个字符
\d 匹配数字
\w 匹配字母,数字,下划线
\s 匹配任何空白
5、re模块的使用方法
1、re的使用步骤
1. 导包
import re
2. 将正则表达式编译成一个pattern对象
pattern = re.compile(
r'正则表达',
'匹配模式')
re.S   ---->.可以匹配换行符,现在什么都能匹配了
re.l -----> 忽略大小写
2、pattern对象有以下几个方法:
(1) match:从头匹配,匹配一次,返回match对象
(2)search:全文匹配,匹配一次,返回match对象
(3)findall:全文匹配,匹配多次,返回list
(4)finditer:全文匹配,匹配多次,返回可迭代对象
6、贪婪模式与非贪婪模式
1、贪婪和非贪婪是对数量控制符 的限制,作用对象就是数量控制符。
2、贪婪表示数量控制符取最大值,非贪婪表示数量控制符取最小值。
3、正则模式数量控制符取最大值也是默认贪婪模式。非贪婪需要通过?来控制。
4、非贪婪主要用于精确查找。
7、正则的sub替换方法
Pattern.sub(
repl, #替换成什么
String,#替换什么
Count#替换次数,可选,默认全部替换
)--->str
repl参数有两种形式:
第一种形式就是字符串:
替换的步骤如下:
第一步:先用pattern对象去匹配目标字符串s,坐地一次匹配
第二步:得到的匹配结果,用repl做第一次替换
第二种形式可以使一个函数:
这个函数有以下要求:
1、这个函数必须有且只有一个参数,这个参数就是第一步中先用pattern对象去匹配目标字符串s,所得到的match对象。
2、这个方法必须有返回值,而且其类型是字符串。
3、将来进行替换成这个函数所返回的字符串
8、页面数据的响应类型
(一)数据的分类:
1、结构化数据
定义:可以用统一的结构加以表示的数据。通常能用关系型数据库存储的数据就是结构化数据。
特点:数据以行为单位,一行数据表示一个实体的信息,每一行的数据的属性是相同的。
处理方法:sql(结构化查询语言)
2、半结构化数据:
特点:自描述的结构
处理方法:xpath、正则
常见的结构:HTML、xml、json
3、非结构化数据:
定义:就是没有固定的结构的数据
处理方法:对于这类数据,我们一般直接整体进行存储,而且一般存储为二进制形式。
常见的有:图片、视频、音频、doc
(二)json数据
1、什么是json?
json(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。json
是js对象的字符串表达式,他使用文本形式表示一个js对象的信息,本质上是一个字符串。
2、json的本质是什么?
(1)本质上就是一个字符串
(2)
在js中对象---->{}----->python中---字典
数组----[] ---python中---列表
将js对象变成json的意义是什么?
先把js对象编程json字符串--->在网络上传输---?对方可以很轻松通过一些高级语言直接将json结构变成他所使用这种高级语言的其中一种数据格式。处理起来很方便。
使用json传输数据使得有效的数据的占比很高。节省流量和时间。
3、在Python中如何处理json?
(1)如果使用requests模块,requests.json()---->python中的list或者dict
(2)使用json模块
json.loads(json字符串) ---->>Python列表或者字典----基本上用的都是loads
json.dumps(python列表或者字典)---->>json字符串
9、xml和html之间的区别
1、语法要求不同:xml的语法比html要求更加严格
html不区分大小写,xml区分的
html可以省略尾标签,xml不能省略任何标签,(严格闭合)
html中属性名字可以没有属性值,xml中不可以
xml中属性必须要是用引号括起来,html可以不加引号
2、作用不同
xml主要用来传输数据
html设计宗旨用来显示数据
3、标记不同
xml中标签是可以自定义的,html中标签是固定的
10、反爬措施:
1、通过user-agent来判断是否是爬虫
解决的办法:封装user-agent到headers中,
一般来说写爬虫代码的第一步就是要把user-agent封装,这可以是我们模拟浏览器进行访问
2、判断是一个爬虫之后,封ip
解决办法:设置代理。---代理池
3、通过访问请求次数和访问请求频率来进行判断是否是爬虫
解决的办法:增加请求频率的限制,减少请求次数,能够在列表页获取的数据就不要再请求详情页获取数据了,能一次性获取的数据就不分批次进行获取
4、通过验证码来进行反爬
验证码:全自动区分计算机和人类的图灵测试
解决办法:破解验证码,使用打码平台的接口
5、页面开发模式变更:数据和页面分离,数据单独通过js获取
解决办法:使用内置浏览器引擎的爬虫。
11、ajax请求如何分析和处理
分析流程:
1、找接口
触发ajax的事件或者动作,之后可以通过模拟这个动作很快就可以定位ajax接口。
2、定接口
找到接口之后,查看response,判断需求数据是否在response。
3、分析接口
思路:ajax接口参数是分析的重点。
分析参数的方法:对比
对比的目的就是寻找那些变化的参数。
对于变化参数可以通过以下几个办法来进行解决:
1、猜---对比几个接口参数找规律
2、查---配合chrome的抓包工具
有可能在上一个接口的结果中(如:高德地图)
可能在js中(js加密)
当我们参数的原理都弄清楚了,那么这个ajax接口就完美的破解了。
4、写代码
按照先获取参数,再请求ajax的思路进行写就可以了。
对于ajax项目:我们写完之后可以尝试减少请求次数。(通过分页的控制)
12、当我们遇到html中没有数据时,我们如何解决?
(1)使用selenium
from selenium import webdriver
创建驱动
driver = webdriver.Chrome()
#2请求url
driver.get(url)
#3、等待
#4、获取页面内容
html_str = dirver.page_source
(2)分析数据来源(ajax)
分析步骤:找接口;定接口,分析接口
找到ajax接口。
分析接口,重点分析接口的参,方法:对比。
使用requests进行接口请求最后解析数据。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69994062/viewspace-2753740/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2021-01-27

  • 博文量
    1
  • 访问量
    549