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

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

    • 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 html

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

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

相关文章

【VUE·疑难问题】定义 table 中每行的高度(使用 element-UI)

一、如何定义 table 中每一行的 height &#xff1f; 1.table例子 <!-- 二、table --><div style"overflow: hidden;display: block;height: 68vh;width: 100%;"><el-table stripe show-header style"width: 100%" :data"tableData&q…

mysql面试题20:有哪些合适的分布式主键方案

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:有哪些合适的分布式主键方案? UUID:UUID通常是由一个二进制的128位整数表示,可以保证全局的唯一性。在Java中,可以通过UUID类生成一个UUID。例…

浏览器性能优化

IIFE惰性函数 有一些函数在运行时需要进行一些判断&#xff0c;但是这个判断只需要执行一次&#xff0c;代码一旦运行判断结果就不会改变&#xff0c;这样的函数称为惰性函数&#xff0c;可以使用下面的手段来进行优化 // 优化前&#xff0c;每次调用都需要进行一次判断 functi…

Hadoop伪分布式环境搭建

什么是Hadoop伪分布式集群&#xff1f; Hadoop 伪分布式集群是一种在单个节点上模拟分布式环境的配置&#xff0c;用于学习、开发和测试 Hadoop 的功能和特性。它提供了一个简化的方式来体验和熟悉 Hadoop 的各个组件&#xff0c;而无需配置和管理一个真正的多节点集群。 在 Ha…

定量活性关系(QSAR)是什么?定量结构-性质关系(QSPR)是什么?

定量活性关系&#xff08;QSAR&#xff09;是什么&#xff1f; 定量活性关系&#xff08;QSAR&#xff0c;Quantitative Structure-Activity Relationship&#xff09;分析是指利用理论计算和统计分析工具来研究系列化合物结构&#xff08;包括二维分子结构、三维分子结构和电…

C++ 学习系列 -- std::list

一 std::list 介绍 list 是 c 中的序列式容器&#xff0c;其实现是双向链表&#xff0c;每个元素都有两个指针&#xff0c;分别指向前一个节点与后一个节点 链表与数组都是计算机常用的内存数据结构&#xff0c;与数组连续内存空间不一样的地方在于&#xff0c;链表的空间是不…

使用libmodbus库开发modbusTcp从站(支持多个主站连接)

使用libmodbus库开发modbusTcp从站&#xff08;支持多个主站连接&#xff09; Chapter1 使用libmodbus库开发modbusTcp从站(支持多个主站连接)rdsmodbusslave.hrdsmodbusslave.cppmain.cpp Chapter1 使用libmodbus库开发modbusTcp从站(支持多个主站连接) 参考链接&#xff1a…

合并不同年度收入数据-外连接

案例需求&#xff1a;统计2019年和2020年的客户销售收入并求和 思路&#xff1a;使用pandas读取excel数据横向连接&#xff0c;使用sum()含函数求和 代码如下&#xff1a; 1、使用pandas读取excel数据 2、由于两个表一个是"客户名称"&#xff0c;一个是客户描述,使…

基于ChatGPT快速入门体验NLP词云

基于ChatGPT快速入门体验NLP词云 一、什么是自然语言处理二、自然语言处理和词云的关系三、Python环境准备四、基于ChatGpt制作词云4.1 ChatGPT生成初级词云代码4.2 ChatGPT生成进阶词云代码4.3 基于ChatGPT解决代码问题4.4 基于ChatGPT建议修改问题代码 一、什么是自然语言处理…

最强中间件!Kafka快速入门(Kafka理论+SpringBoot集成Kafka实践)

自媒体文章上下架 需求分析 媒体端下架文章同时app端也下架文章的实现可以通过feign去调用&#xff0c;但这种实现耦合度太高&#xff0c;这里使用MQ进行解耦 自媒体端一旦上下架文章就发送消息给MQ&#xff0c;文章微服务在去读取消息根据消息内容上下架文章 MQ还可以流量削…

24 Python的sqlite3模块

概述 在上一节&#xff0c;我们介绍了Python的shutil模块&#xff0c;包括&#xff1a;shutil模块中一些常用的函数。在这一节&#xff0c;我们将介绍Python的sqlite3模块。sqlite3模块是Python中的内置模块&#xff0c;用于与SQLite数据库交互。SQLite是一个轻量级的磁盘数据库…

windows server 2012 服务器打开系统远程功能

服务器上开启远程功能 进入服务器&#xff0c;选择“添加角色和功能” 需要选择安装的服务器类型&#xff0c;如图所示 然后在服务器池中选择你需要使用的服务器。 选择完成后&#xff0c;在图示列表下勾选“远程桌面服务” 再选择需要安装的功能和角色服务。 选择完成确认内容…

CTFHUB - SSRF

目录 SSRF漏洞 攻击对象 攻击形式 产生漏洞的函数 file_get_contents() fsockopen() curl_exec() 提高危害 利用的伪协议 file dict gopher 内网访问 伪协议读取文件 端口扫描 POST请求 总结 上传文件 总结 FastCGI协议 CGI和FastCGI的区别 FastCGI协议 …

MyBatis-plus使用

1 基础介绍 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 它已经封装好了一些crud方法&#xff0c;我们不需要再写…

Leetcode hot 100之双指针(快慢指针、滑动窗口)

目录 数组 有序的平方仍有序 删除/覆盖元素 移动零&#xff1a;交换slow和fast 滑动窗口&#xff1a;最短的连续子串&#xff08;r可行解->l--最短解&#xff09; 最小长度的子数组 求和&#xff1a;sort、l i 1, r len - 1 三数之和abctarget 四数之和abcdtarg…

Linux中Too many open files

Linux中Too many open files 问题分析和解决_e929: too many viminfo temp files-CSDN博客 too many open files 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值。 查看每个用户最大允许打开文件数量 ulimit -a fdipzoneubuntu:~$ ulimit -a core file …

修改 ModelScope 默认缓存路径

修改 ModelScope 默认缓存路径 设置 MODELSCOPE_CACHE 和 MODELSCOPE_MODULES_CACHE 两个环境变量。 export MODELSCOPE_CACHE<your_favourite_path>/hub export MODELSCOPE_MODULES_CACHE<your_favourite_path>/modelscope_modules完结&#xff01;

VUE3照本宣科——package.json与vite.config.js

VUE3照本宣科——package.json与vite.config.js VUE3照本宣科系列导航 前言一、package.json1.name2.version3.private4.scripts5.dependencies6.devDependencies 二、vite.config.js1.plugins2.resolve.alias3.base4.mode 三、VUE3照本宣科系列总结 VUE3照本宣科系列导航 1.VU…

大数据Doris(五):开始编译 Doris

文章目录 开始编译 Doris 一、下载Doris的安装包 二、解压缩 三、上传配置文件

commons-collections4工具常用方法

commons-collections4是Apache Commons项目中的一个模块&#xff0c;提供了一系列处理集合和映射的工具类、接口和算法。它是在commons-collections的基础上进行了改进和增强&#xff0c;为Java开发者提供了更多集合操作的功能和便利性。 引入依赖 <dependency><group…