爬虫基础学习

embedded/2025/1/17 8:13:19/

什么是爬虫:

  • 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。

爬虫的价值:

  • 实际应用
  • 就业

爬虫究竟是合法还是违法的?

  • 在法律中是不被禁止
  • 具有违法风险
  • 善意爬虫 恶意爬虫

爬虫带来的风险可以体现在如下方面:

  • 爬虫干扰了被访问网站的正常运营
  • 爬虫抓取了收到法律保护的特定类型的数据或信息

如何在使用编写爬虫的过程中避免进入局子

  • 时常的优化自己的程序,避免干扰被访问网站的正常运行
  • 在使用,传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户因此商业机密等敏感内容需要及时停止爬取或传播。

爬虫在使用场景中的分类

  • 通用爬虫:抓取系统重要组成部分。抓取的是一整张页面数据。
  • 聚焦爬虫:是建立在通用爬虫的基础之上。抓取的是页面中特定的局部内容
  • 增量式爬虫:检测网站中数据更新的情况。只会抓取网站中最新更新出来的数据

爬虫的矛与盾

反爬机制
  • 门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
反反爬策略:
  • 爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网页数据。

robots.txt协议

  • 君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。

http协议

概念:就是服务器和客户端进行数据交互的一种形式。

常用请求头信息
  • 请求载体的身份标识:User-Agent
  • Connection:请求完毕后,是断开连接还是保持连接
常用响应头信息
  • Content-Type:服务器响应回客户端的数据类型

https协议:

安全的超文本传输协议

加密方式
  • 对称秘钥加密
  • 非对称秘钥加密
  • 证书秘钥加密

requests模块:

python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。

作用:模拟浏览器发请求。
如何使用:(requests模块的编码流程)

步骤1:指定url

步骤2:发起请求

步骤3:获取响应数据

步骤4:持久化存储

环境安装:
pip install requests

实战编码1:

需求:爬取搜狗首页的页面数据

#需求:爬取搜狗首页页面数据
from http.client import responsesimport requests
if __name__ == "__main__":#指定urlurl = 'https://www.sogou.com/'#2.发起请求#get方法会返回一个响应对象responses = requests.get(url=url)#3.获取响应数据.txt返回的是字符串形式的响应数据page_text = responses.textprint(page_text)#4.持久化存储with open('./sogou.html','w',encoding = 'utf-8') as fp:fp.write(page_text)print('爬取数据结束!!!')

实战编码2:

需求:破解百度翻译

获取UA

#UA User-Agent(请求整体的身份标识)
#UA监测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,表明该请求是一个正常的请求。但是,如果检测到请求的载体身份标识不是基于某一浏览器的,则表明该#请求为不正常的请求(爬虫),则服务器端很可能拒绝本次请求。
#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器。
import requests
if __name__ == "__main__":#UA伪装:将对应的User-Agent封装在一个字典中headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}url = 'https://fanyi.sogou.com/text'#处理url携带的参数:封装到字典中kw  = input('enter a word:')param = {'fr' : kw}#对指定的url发起请求,对应的url是携带参数的,并且请求过程中处理了参数response = requests.get(url=url,params = param ,headers = headers )page_text = response.textfileName = kw+'.html'with open(fileName,'w',encoding='utf-8') as fp:fp.write(page_text)print(fileName,'保存成功!!!')

实战编码3:

需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情参数

import requests
import json
if __name__ == "__main__":#1.指定urlurl = 'https://movie.douban.com/typerank'#2.进行UA伪装headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}#3.get请求参数处理word = input('输入类型')param = {'type_name':'word','type':'24','interval_id' :'100:90','action' :''}response = requests.get(url = url,params = param ,headers = headers)page_text = response.textfileName = word + '.html'with open(fileName, 'w', encoding='utf-8') as fp:fp.write(page_text)print(fileName, '保存成功!!!')

聚焦爬虫:

爬取页面中指定的页面内容。

编码流程:

  • 指定url
  • 发起请求
  • 获取响应数据
  • 数据解析
  • 持久化存储

数据解析分类:

  • 正则
  • bs4----python特有
  • xpath(***)
正则数据解析原理概述:

解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储

  • 1.进行指定标签的定位
  • 2.标签或者标签对应的属性中存储的数据值进行提取(解析)
import re #加载正则模块
import os #加载创建该模块,可以创建文件夹
bs4进行数据解析

数据解析的原理:

1.标签定位

2.提取标签、标签属性中存储的数据值

bs4数据解析的原理:

1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

pip install bs4   #创建BeautifulSoup对象
pip install lxml  #解析器
xpath解析:

最常用且最便捷高效的一种解析方式。通用性。

xpath解析原理:

1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中

2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获

环境的安装:

pip install lxml

如何实例化一个etree对象:from lxml import etree

1.将本地的html文档中的源码数据加载到etree对象中:etree.parse(filePath)

2.可以将从互联网上获取的源码数据加载到该对象中etree.HTML(‘page_text’)


http://www.ppmy.cn/embedded/154601.html

相关文章

Rust 零大小类型(ZST)

在 Rust 中,零大小类型(Zero-Sized Type,简称 ZST) 是指在内存中不占用任何存储空间的类型。这些类型的大小为 0 字节,编译器会对它们进行优化,避免为它们分配实际的存储空间。ZST 是 Rust 类型系统中一个非…

【docker下载kaggle国外镜像超时】kaggle比赛中时遇到的问题

Docker拉取镜像时的痛点 当Docker在拉取镜像时遇到拉取超时问题,往往会让用户深感困扰。造成这种现象的原因可能多种多样,其中网络问题是最常见的原因之一。由于Docker的镜像仓库往往部署在远程服务器上,因此当用户网络环境不佳时&#xff0…

MySQL(高级特性篇) 07 章——InnoDB数据存储结构

一、数据库的存储结构:页 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切地说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的…

milvus过滤功能

数据格式: [{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682", "likes": 165},{"id": 1, "vecto…

centos7设置软链接

在CentOS中设置软链接(也称为符号链接)可以使用ln命令,并使用-s选项来指定软链接。软链接类似于Windows系统中的快捷方式。 以下是创建软链接的基本命令格式: ln -s [目标文件或目录] [软链接名]ln -s /home/user/original_fold…

CSS 圆形头像和破图时显示默认图片

一、需求 1、css实现圆形头像 2、破图是显示默认图片 二、实现 <img :src"photoSrc" class"circle-avatar" :width"size" :height"size" error"handleImageError" //破图时使用的方法 > <style> .circl…

Kivy App开发之UX控件Spinner选择框

Spinner也是一个下拉列表,在选择框中快速地从一组值中选择一个值,默认状态下,Spinner会显示当前text的属性值,点击时会显示一个下拉菜单,从其中选择一个新的值。 常用属性如下 属性说明values下拉列表的值,默认空列表[]is_open是否展开,默认falsesync_height是否更改下…

《C++11》静态断言(Static Assert)的使用与优势

C11引入了许多新特性&#xff0c;其中之一就是静态断言&#xff08;Static Assert&#xff09;。这是一种在编译时期进行断言的机制&#xff0c;它可以帮助我们在编译阶段就发现错误&#xff0c;而不是等到运行时才发现。这样可以大大提高代码的质量和稳定性。本文将详细介绍静…