反爬虫机制与反爬虫技术(一)

反爬虫机制与反爬虫技术一

    • 1、网络爬虫的法律与道德问题
    • 2、反爬虫机制与反爬虫技术
      • 2.1、User-Agent伪装
      • 2.2、代理IP
      • 2.3、请求频率控制
      • 2.4、动态页面处理
      • 2.5、验证码识别
    • 3、反爬虫案例:豆瓣电影Top250爬取
      • 3.1、爬取目标
      • 3.2、库(模块)简介
      • 3.3、翻页分析
      • 3.4、发送请求
      • 3.5、数据提取与解析
        • 3.5.1、使用BeautifulSoup库
        • 3.5.2、使用lxml与XPath库
      • 3.6、案例调试
      • 3.7、案例测试
    • 4、如何使用Excel打开CSV

1、网络爬虫的法律与道德问题


网络爬虫在使用过程中需要注意法律和道德问题。以下是一些常见的问题:

  • 合法性: 爬虫的行为必须遵守相关法律法规,尊重网站的隐私权和知识产权。不得未经授权地访问和抓取受保护的网页内容
  • 访问频率: 爬虫应该合理设置访问频率,避免对网站服务器造成过大负载或影响其他用户的正常访问
  • 数据使用: 抓取到的数据应该按照法律和道德准则进行合法和合理的使用,遵守数据保护和隐私规定

在使用网络爬虫时,应当遵守相关规定并尊重网站的权益和用户的隐私

2、反爬虫机制与反爬虫技术

2.1、User-Agent伪装

User-Agent能够通过服务器识别出用户的操作系统及版本、CPU类型、浏览器类型及版本等

一些网站会设置User-Agent白名单,只有在白名单范围内的请求才可以正常访问

因此,在我们爬虫时,需要设置User-Agent伪装成一个浏览器HTTP请求,通过修改User-Agent,可以模拟不同的浏览器或设备发送请求,从而绕过一些简单的反爬虫机制

2.2、代理IP

一些网站通常会根据IP地址来判断请求的合法性,如果同一个IP地址频繁请求,就会被认为是爬虫。使用IP代理可以隐藏真实的IP地址,轮流使用多个IP地址发送请求,可以增加爬虫的隐匿性

代理IP是指通过中间服务器转发网络请求的技术。在爬虫中,使用代理IP可以隐藏真实的访问源,防止被目标网站封禁或限制访问

代理分为正向代理和反向代理。正向代理是由客户端主动使用代理服务器来访问目标网站,反向代理是目标网站使用代理服务器来处理客户端的请求

代理IP的优缺点有:

  • 优点:
    • 隐藏真实的访问源,保护个人或机构的隐私和安全
    • 绕过目标网站的访问限制,如IP封禁、地区限制等
    • 分散访问压力,提高爬取效率和稳定性
    • 收集不同地区或代理服务器上的数据,用于数据分析和对比
  • 缺点:
    • 代理IP的质量参差不齐,有些代理服务器可能不稳定、速度慢或存在安全风险
    • 一些目标网站会检测和封禁常用的代理IP,需要不断更换和验证代理IP的可用性
    • 使用代理IP可能增加网络请求的延迟和复杂性,需要合理配置和调整爬虫程序
    • 使用代理IP需要遵守相关法律法规和目标网站的使用规则,不得进行非法活动或滥用代理IP服务

亮数据代理IP:https://www.bright.cn/locations

2.3、请求频率控制

频繁的请求会给网站带来较大的负担,并影响网站的正常运行,因此,网站通常会设置请求频率限制。Python中的time库可以用来控制请求的时间间隔,避免过于频繁的请求

2.4、动态页面处理

一些网站为了防止爬虫,使用了JavaScript来动态生成页面内容,这对于爬虫来说是一个挑战。Python中的Selenium库可以模拟浏览器的行为,执行JavaScript代码,从而获取动态生成的内容

例如在进行数据采集时,很多网站需要进行登录才能获取到目标数据,这时可以使用Selenium库进行模拟登录进行处理

2.5、验证码识别

一些网站为了防止爬虫,会在登录或提交表单时添加验证码。随着反爬的不断发展,逐渐出现了更多复杂的验证码,例如:内容验证码、滑动验证码、图片拼接验证码等

Python提供了一些强大的图像处理库,例如Pillow、OpenCV等,可以用来自动识别验证码,从而实现自动化爬取

3、反爬虫案例:豆瓣电影Top250爬取


本案例将使用User-Agent伪装、代理IP、请求频率控制反爬虫技术,动态页面处理和验证码识别将在后续的文章中使用

3.1、爬取目标

豆瓣电影Top250排行榜

爬取字段: 排名、电影名、评分、评价人数、制片国家、电影类型、上映时间、主演、影片链接

结果展示:

在这里插入图片描述

豆瓣:https://www.douban.com/

豆瓣电影:https://movie.douban.com/

豆瓣电影Top250:https://movie.douban.com/top250

在这里插入图片描述

3.2、库(模块)简介

import numpy as np
import pandas as pd
import requests
from bs4 import BeautifulSoup
from lxml import etree
import re
import time

相关模块的详细介绍及使用见文章:Python网络爬虫基本库

3.3、翻页分析

在这里插入图片描述
通过观察浏览器地址栏,发现页面间网址存在如下规律:

第1页:https://movie.douban.com/top250?start=0&filter=

第2页:https://movie.douban.com/top250?start=25&filter=

第3页:https://movie.douban.com/top250?start=50&filter=

… …

# 构造每页的网页链接
urls = [rf'https://movie.douban.com/top250?start={str(i * 25)}&filter=' for i in range(10)]

3.4、发送请求

def get_html_str(url: str):# 请求头模拟浏览器headers = {'User-Agent': 'Mozilla/5.0'}# 代理IPproxies = {"http": "http://183.134.17.12:9181"}# 发送请求resp = requests.get(url, headers=headers, proxies=proxies)# 获取网页源代码html_str = resp.content.decode()return ht

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Solidity】智能合约案例——①食品溯源合约

目录 一、合约源码分析: 二、合约整体流程: 1.部署合约 2.管理角色 3.食品信息管理 4.食品溯源管理 一、合约源码分析: Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址…

基于支持向量机SVM和MLP多层感知神经网络的数据预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 一、支持向量机(SVM) 二、多层感知器(MLP) 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .…

vue3前端开发-flex布局篇

文章目录 1.传统布局与flex布局优缺点传统布局flex布局建议 2. flex布局原理2.1 布局原理 3. flex常见属性3.1 父项常见属性3.2 子项常见属性 4.案例实战(携程网首页) 1.传统布局与flex布局优缺点 传统布局 兼容性好布局繁琐局限性,不能再移动端很好的布局 flex布…

C++深入学习part_1

Linux下编译C程序 安装g命令:sudo apt install g 编译命令:$ g *.cc 或者 *.cpp -o fileName; hellworld 编译程序可以看到: namespace命名空间 首先,命名空间的提出是为了防止变量重名冲突而设置的。 浅浅试一下&#xff1…

漏洞复现-易思无人值守智能物流文件上传

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

STC89C51基础及项目第10天:LCD显示字符(非标协议外设)

1. 初识LCD1602(233.79) 非标协议外设 LCD1602显示 LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 1602 即 32 字符(16列两行) 引脚说明 第 1 脚: VSS 为电源地第 2 脚&#xff1…

Unity AI Sentis 基础教程

Unity AI Sentis基础教程 Unity AI Sentis基础教程Unity AI 内测资格申请Unity 项目Package Manager开始尝试模型下载识别图片完整代码代码搭载运行 射线绘画 URP(扩展)射线绘画脚本脚本搭载效果 Sentis 是 AI 模型的本地推理引擎,它利用最终…

3D孪生场景搭建:模拟仿真

前面几期文章介绍如何使用NSDT 编辑器 搭建3D应用场景,本期介绍下孪生场景中一个一个非常重要的功能:模拟仿真。 1、什么是模拟仿真 模拟仿真是一种用于描述、分析和模拟现实世界中系统、过程或事件的计算机模型和程序。仿真通过输入各种参数和条件&am…

【iOS】——仿写计算器

文章目录 一、实现思路二、实现方法三、判错处理 一、实现思路 先搭建好MVC框架,接着在各个模块中实现各自的任务。首先要创建好UI界面,接着根据UI界面的元素来与数据进行互动,其中创建UI界面需要用到Masonry布局。 二、实现方法 在calcu…

Maven(4)-利用intellij idea创建maven 多模块项目

本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具:intellij idea。 一、项目结构 multi-module-project是主工程,里面包含两个模块(Module): web-app是应用层,用于界面展示&#xff…

AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

特殊笔记_10/7

安装node到第4.1就行(安装npm的淘宝镜像) Node.js安装与配置(详细步骤)_nodejs安装及环境配置_LI4836的博客-CSDN博客 安装vscode 下载组件: 点击第五个 Auto Close Tag:自动闭合标签 Chinese (Simpli…

MQ - 36 云原生:业界MQ的计算存储分离的设计与实现

文章目录 导图概述什么是存算分离架构必须是存算分离架构吗实现存算分离架构的技术思考如何选择合适的存储层引擎存储层:分区存储模型的设计计算层:弹性无状态的写入业界主流存算分离架构分析RocketMQ 5.0 架构分析Pulsar 存算架构分析总结导图 概述 结合云原生、Serverless…

JetBrains ToolBox修改应用安装位置

TooBox修改应用安装位置 1.关闭ToolBox 2.修改配置文件 找到配置文件所在位置 C:\Users\用户名\AppData\Local\JetBrains\Toolbox\.settings.json增加install_location字段 "install_location": "E:\\DevTool\\IDE",E:\DevTool\IDE可以改成自己想要的…

Springboot项目log4j与logback的Jar包冲突问题

异常信息关键词: SLF4J: Class path contains multiple SLF4J bindings. ERROR in ch.qos.logback.core.joran.spi.Interpreter24:14 - no applicable action for [properties], current ElementPath is [[configuration][properties]] 详细异常信息&#xff1a…

常见排序算法详解

目录 排序的相关概念 排序: 稳定性: 内部排序: 外部排序: 常见的排序: 常见排序算法的实现 插入排序: 基本思想: 直…

自学接口测试系列 —— 自动化测试用例设计基础!

一、接口测试思路总结 ❓首先我们在进行接口测试设计前思考一个问题:接口测试,测试的是什么? ❗我们必须要知道,接口测试的本质:是根据接口的参数,设计输入数据,验证接口的返回值。 那么接口…

day24-JS进阶(构造函数,new实例化,原型对象,对象原型,原型继承,原型链)

目录 构造函数 深入对象 创建对象三种方式 构造函数 new实例化执行过程(important!) 实例成员&静态成员 实例对象&实例成员 静态成员 内置构造函数 基本包装类型 Object Object.keys(obj)返回所有键组成的字符串数组 Object.values(obj)返回所有值组成的字…

Nginx支持SNI证书,已经ssl_server_name的使用

整理了一些网上的资料,这里记录一下,供大家参考 什么是SNI? 传统的应用场景中,一台服务器对应一个IP地址,一个域名,使用一张包含了域名信息的证书。随着云计算技术的普及,在云中的虚拟机有了一…

RPC分布式网络通信框架项目

文章目录 对比单机聊天服务器、集群聊天服务器以及分布式聊天服务器RPC通信原理使用Protobuf做数据的序列化,相比较于json,有哪些优点?环境配置使用项目代码工程目录vscode远程开发Linux项目muduo网络库编程示例CMake构建项目集成编译环境Lin…