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

news/2024/11/9 9:29:39/

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

    • 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.ppmy.cn/news/1140099.html

相关文章

java学习-day21(常用类)

文章目录 回顾:今天的内容1.常用类1.1StringBuffer类1.2枚举类(enum)1.3包装类1.4Math1.5Random类1.6System类1.7Runtime【不重要】1.8Date类1.9Calendar 回顾: 1.为什么重写equals方法必须重写hashCode方法是因为判断两个对象是…

LuatOS-SOC接口文档(air780E)-- fskv - kv数据库,掉电不丢数据

示例 -- 本库的目标是替代fdb库 -- 1. 兼容fdb的函数 -- 2. 使用fdb的flash空间,启用时也会替代fdb库 -- 3. 功能上与EEPROM是类似的 fskv.init() fskv.set("wendal", 1234) log.info("fskv", "wendal", fskv.get("wendal"))--[[ fs…

7.canvas图形颜色设置

之前我们绘制的所有图形都是使用的默认色黑色,今天我们开始给图形增色。 createLinearGradient() 根据两个给定的坐标值所构成的线段创建一个线性渐变。该方法返回一个线性 CanvasGradient对象。想要应用这个渐变,需要把这个返回值赋值给fillStyle或者…

C#学习系列相关之多线程(二)----Thread类介绍

一、线程初始化 1.无参数 static void Main(string[] args) {//第一种写法Thread thread new Thread(test);thread.Start();//第二种写法 delegateThread thread1 new Thread(new ThreadStart(test));thread1.Start();//第三种写法 lambdaThread thread2 new Thread(() >…

卷积神经网络的发展历史-VGG

VGG的产生 2014 年,Simonyan和Zisserman提出了VGG系列模型(包括VGG-11/VGG-13/VGG-16/VGG-19),并在当年的ImageNet Challenge上作为分类任务第二名、定位(Localization)任务第一名的基础网络出现。 VGG的…

c++视觉ROI 区域和ROI 区域图像叠加

ROI 区域提取和ROI 区域图像叠加 ROI 区域提取 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg");// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the image." …

黑科技-Android

1热更新&#xff08;热修复&#xff09;&#xff1a;apk不用发版&#xff0c;就能修复bug 原理&#xff1a;我们修复好了bug的时候&#xff0c;把那些有改动的java源码编译成class&#xff0c;再打包成dex&#xff0c;然后通过反射技术放到dexElements数组的最前面&#xff0c;…

【Stm32-F407】Keil uVision5 的安装

文章内容如下&#xff1a; 1&#xff09;Keil uVision5 安装包的获取2&#xff09;Keil uVision5 的安装3&#xff09;Keil uVision5 中 Stm32-F407 芯片包的获取与安装4&#xff09;注册 Keil uVision5 1&#xff09;Keil uVision5 安装包的获取 Keil uVision5 安装包链接: h…