网页爬虫反扒措施有哪些?

爬虫之常见的反扒

cookies

一般用requests直接请求网址的时候有时候可能会遇到反扒措施,这时候可以考虑一下加上user-agent伪装成浏览器;也可能有登录限制,这时候cookies就有用处了

浏览器中的cookie是保存我们的账号数据和访问记录,在爬取的过程中加上cookie可以增加爬取数据的成功几率

获取cookies有两种方式,一种是requests 获取cookies ;一种是selenium获取cookies

1、requests获取cookies

自动登录原理:人工在浏览器上完成登录操作,获取登录之后的cookie信息,再通过代码发送请求的时候携带cookies信息

requests 获取cookies步骤:

浏览器打开网址——浏览器控制台——network——all——headers——cookie ——将cookies的值复制

import requests
headers = {'cookie':'.....'
}
resp=requests.get('https://www.zhihu.com/',headers=headers)
print(resp.text)

2、selenium获取cookies

获取自动登录网站的cookies

· 打开需要完成自动登录的网站(需要获取cookie的网站)

· 给足够长的时候让人工完成自动登录并且人工刷新出登录之后的页面

强调:一定要吧第一个页面刷新出登之后的转态

· 获取登录之后的cookie并且将获取到的cookie保存到本地文件

from selenium.webdriver import Chrome
from json import dumps
b = Chrome()
# 1. 打开需要完成自动登录的网站(需要获取cookie的网站)
b.get('https://www.taobao.com/')
# 2. 给足够长的时间让人工完成自动登录并且人工刷新出登录后的页面
# 强调:一定要把第一个页面刷新出登录之后的状态
input('已经完成登录:')
# 3. 获取登录后的cookie并且将获取到的cookie保存到本地文件
cookies = b.get_cookies()
print(cookies)
with open('file3/taobao.txt', 'w', encoding='utf-8') as f:f.write(dumps(cookies))

3、selenium使用cookies

· 打开需要自动登录的网站

· 添加cookies

· 重新打开需要登录的网页

from selenium.webdriver import Chrome
from json import loads
b = Chrome()
# 1. 打开需要自动登录网页
b.get('https://www.taobao.com/')
# 2. 添加cookie
with open('file3/taobao.txt', encoding='utf-8') as f:content = f.read()cookies = loads(content)
for x in cookies:b.add_cookie(x)
# 3. 重新打开需要登录的网页
b.get('https://www.taobao.com/')

代理ip

在爬取网站的过程中,因为频繁访问该网站,会出现ip被封情况,但是又必须获取该数据,可以用代理ip来访问该网站;分为两种情况,requests和selenium

1、requests 使用代理ip

获取代理ip的流程------省略

用法如下:

import requests
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
# 两种proxies方式选择其一
# proxies = {
#     'http':'.....',
#     'https':'.....'
# }
proxies = {'http':'http://119.7.147.173:4531','https':'http://119.7.147.173:4531'
}
response=requests.get('https://movie.douban.com/top250',headers=headers,proxies=proxies)
print(response.text)

实际用法:

import requests
from time import sleep
def get_ip():url='获取代理ip的地址'while True:response=requests.get(url)if response.text[0]=='{':print('提取失败')continuesleep(1)return response.text
def get_douban():headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}ip=get_ip()proxies = {'http': ip,'https':ip}response=requests.get('https://movie.douban.com/top250',headers=headers, proxies=proxies)print(response)
if __name__ == '__main__':get_douban()

2、selenium使用代理ip

from selenium.webdriver import Chrome,ChromeOptions
# 1、添加配置对象
options = ChromeOptions()
# 2、添加配置
options.add_argument('--proxy-server=http://代理ip')
# 3、通过指定配置创建浏览器对象
b=Chrome(options=options)
b.get(url)  #  url是我们需要访问的网址

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

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

相关文章

Java 语言的入门级教程有哪些?

1、Java SE 1.1、Java基础 基础概念/语法:面向对象(继承、封装、多态)基础、包、类、接口、方法、对象、属性、第一个 Java 程序。 数据类型: 1)基本数据类型8种:byte、short、int、long、float、doubl…

2023-11-27操作系统---进程—线程—实验

目录 2023-11-27操作系统_进程—线程_实验 5-10&#xff1a; 代码&#xff1a; 运行结果: 5-11 代码&#xff1a; 运行结果&#xff1a;​编辑 2023-11-27操作系统实验 5-10&#xff1a; 代码&#xff1a; #include<unistd.h> #include<stdio.h> #include…

<JavaEE> 线程的五种创建方法 和 查看线程的两种方式

目录 一、线程的创建方法 1.1 继承 Thread -> 重写 run 方法 1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法 1.3 实现 Runnable 接口 -> 重写 run 方法 1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法 1.5 使用 lambda 表达式 二…

「Verilog学习笔记」非整数倍数据位宽转换8to12

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 要实现8bit数据至12bit数据的位宽转换&#xff0c;必须要用寄存器将先到达的数据进行缓存。8bit数据至12bit数据&#xff0c;相当于1.5个输入数据拼接成一个输出数据&#…

IDEA DeBug

文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 01_Debug简介和意义 什么是程序DeBug&am…

Python读取modbus RTU协议

Python读取modbus RTU协议 下载modbus_tk库 pip3 install modbus_tkexecute主要函数 参考文章Python玩转modbus 软件模拟 vspdmodbus slave 虚拟COM1和COM2 modbus slave连接COM2口 更改从机数据 Python读取 import serial from modbus_tk import defines as cst from m…

Linux的软件安装

Linux的软件安装 1、rpm软件安装包 RPM&#xff08;RedHat Package Manager&#xff09;安装管理 ​ 这个机制最早是由Red Hat开发出来,后来实在很好用,因此很多 distributions&#xff08;发行版&#xff09;就使用这个机制来作为软件安装的管理方式 。包括Fedora,CentOS,S…

概念理论类: Linux的管道机制

1、 Linux管道机制是&#xff1a; A程序的输出&#xff0c;是B程序的输入 ls | wc -l // |就像对象&#xff0c; ls输出 |&#xff0c; wc -l从这个对象取数据 2、 Linux管道&#xff0c;使得我们可以将各个命令连接起来&#xff1a; ls | wc -l 以上命令: ls的输出&#x…

CentOS添加开机启动

1.编写项目启动脚本&#xff08;run.sh&#xff09; #!/bin/bash-切换到程序所在路径 cd /home/cavs_install/app/cavs-admin/target/ # 等待其他组件启动完毕后再启动本项目&#xff08;如果不需要等待&#xff0c;本步骤可省略&#xff09; sleep 300 # 实际启动命令 nohup …

LeetCode Hot100 20.有效的括号

题目&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对…

Java核心知识点整理大全19-笔记

目录 14.1.5.2. MemStore 刷盘 全局内存控制 MemStore 达到上限 RegionServer 的 Hlog 数量达到上限 手工触发 关闭 RegionServer 触发 Region 使用 HLOG 恢复完数据后触发 14.1.6.HBase vs Cassandra 15. MongoDB 15.1.1. 概念 15.1.2. 特点 16. Cassandra 16.1.1…

通过内存标记扩展(MTE)提供增强的安全性

目录 一、内存安全BUG导致的安全漏洞 二、检测和修复内存安全漏洞的难点 三、MTE如何应对这一挑战

Day 12 周日和周一

每日博客Day 12 每日算法 三数之和 这个代码是肯定跑不了的&#xff0c;但是我个人最开始的想法确实是差不多这个样子的 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {//两层for循环来确定ab的数值&#xff0c;然后再去…

MATLAB实战 | 不同形式的三维曲面图

通常&#xff0c;MATLAB中绘制三维曲面图&#xff0c;先要生成网格数据&#xff0c;再调用mesh函数和surf函数绘制三维曲面。若曲面用含两个自变量的参数方程定义&#xff0c;则还可以调用fmesh函数和fsurf函数绘图。若曲面用隐函数定义&#xff0c;则可以调用fimplicit3函数绘…

【JUC】十三、CompletableFuture的常用方法

文章目录 1、获得结果和触发计算2、对计算结果进行处理3、对结算结果进行消费4、CompletableFuture的thenXX和thenXXAsync5、对计算速度进行选用6、对计算结果进行合并 1、获得结果和触发计算 获取任务结果 public T get()public T get(long timeout, TimeUnit unit)public T…

wpf 使用 StringFormat

在xaml里使用StringFormat,将两个字符串拼起来&#xff0c;一个字符串时固定不变的&#xff0c;一个字符串是动态绑定&#xff0c;如&#xff1a;平均密度&#xff1a;绑定的值 代码如下&#xff1a; <TextBlock Margin"0,0,0,0" Text"{Binding CellAverage…

STM32F103C8T6——4路PWM

//main()函数前面的extern TIM_HandleTypeDef htim2;extern TIM_HandleTypeDef htim3;//main()函数内部额外添加的HAL_TIM_Base_Start_IT(&htim2);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);HAL_TIM_PWM_Start(&htim2…

SpringBoot注入Bean的几种方式

目录 统一测试类与config类 1. 启动类注入Bean 2.启动类扫描ComponentScan 3.启动类EnableConfigurationProperties 4.启动类Import 统一测试类与config类 yml student:red: dou config Configuration注解 与 Component注解都可以。 Data Configuration Configuratio…

v-clock

v-clock 给元素上加了这个属性&#xff0c;初始值为display&#xff1a;none&#xff0c;登vue的文件编译结束后再删除这个元素&#xff0c;回显编译后的元素和数据 <body><div id"app"></div><template id"my-app"><h2 v-cl…

013 C++ set与map的用法

前言 本文将会向你介绍set与map的主要用法 set详解 int main() {set<string> s;vector<string> v { "Fan1","Fan2", "Fan3", "Fan4" };for (auto e : v){s.insert(e);}string input;while (cin >> input){if (s.…