首页 > 编程语言 >​python爬虫——爬虫伪装和反“反爬”

​python爬虫——爬虫伪装和反“反爬”

时间:2023-08-11 15:06:14浏览次数:40  
标签:python 反爬 爬虫 Agent url User import requests response

前言

爬虫伪装和反“反爬”是在爬虫领域中非常重要的话题。伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序,从而减少被服务器封禁的风险;反“反爬”则是应对服务器加强的反爬虫机制。下面将详细介绍一些常见的伪装和反反爬技巧,并提供对应的代码案例。

1. User-Agent伪装

User-Agent是HTTP请求头的一部分,其中包含了浏览器、手机等使用的应用程序的信息。在爬虫中,使用默认的User-Agent,或者使用爬虫常用的User-Agent,容易被服务器识别为机器人,因此我们需要伪装User-Agent。使用Python中的requests库可以方便地添加User-Agent头。

import requests


# 设置User-Agent头

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}


# 请求URL

url = 'https://www.example.com'


# 发送请求

response = requests.get(url, headers=headers)


# 输出响应内容

print(response.text)

2. IP代理

单个IP频繁访问服务器容易被封禁,因此我们可以使用IP代理来访问网站。IP代理有免费和付费的,这里我们使用免费的IP代理。使用Python中的requests库可以方便地设置代理服务器。


import requests


# 设置代理服务器

proxies = {

    'http': 'http://127.0.0.1:1080',

    'https': 'https://127.0.0.1:1080'

}


# 请求URL

url = 'https://www.example.com'


# 发送请求

response = requests.get(url, proxies=proxies)


# 输出响应内容

print(response.text)

3. 随机访问时间间隔

频繁访问服务器容易被识别为机器人,因此我们需要模拟人类访问网站的行为,随机设置访问时间间隔。使用Python中的time库可以方便地设置访问时间间隔。

import requests

import time

import random


# 设置User-Agent头

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}


# 请求URL

url = 'https://www.example.com'


# 随机访问时间间隔

time.sleep(random.randint(0, 3))


# 发送请求

response = requests.get(url, headers=headers)


# 输出响应内容

print(response.text)

4. Cookie伪装

有些网站需要登录才能访问,我们需要在访问网站时携带cookie,以模拟登录状态。使用Python中的requests库可以方便地设置cookie。


import requests


# 设置User-Agent头

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}


# 设置cookie

cookies = {

    'sessionid': 'xxxx'

}


# 请求URL

url = 'https://www.example.com'


# 发送请求

response = requests.get(url, headers=headers, cookies=cookies)


# 输出响应内容

print(response.text)

5. 使用验证码识别库

有些网站需要进行验证码识别,我们可以使用OCR等技术进行识别。这里我们使用Python中的Tesseract-OCR库对验证码进行识别。


import requests

import pytesseract

from PIL import Image


# 设置User-Agent头

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}


# 请求验证码图片

url = 'https://www.example.com/captcha.png'

response = requests.get(url, headers=headers)


# 保存验证码图片

with open('captcha.png', 'wb') as f:

    f.write(response.content)


# 对验证码图片进行识别

captcha_image = Image.open('captcha.png')

captcha_text = pytesseract.image_to_string(captcha_image)


# 输出验证码文本

print(captcha_text)

6. 动态解析页面

有些网站会在前端使用JS异步加载数据,此时需要使用Selenium等工具对页面进行动态解析。这里我们使用Python中的Selenium库来模拟浏览器访问网站。


from selenium import webdriver


# 设置User-Agent头

options = webdriver.ChromeOptions()

options.add_argument(

    'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')


# 请求URL

url = 'https://www.example.com'


# 使用Selenium打开网页

driver = webdriver.Chrome(options=options)

driver.get(url)


# 执行JS代码

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")


# 获取响应内容

response = driver.page_source


# 输出响应内容

print(response)


# 关闭浏览器

driver.quit()

7. 多账号轮流使用

如果一个账号频繁访问被封禁,我们可以使用多个账号轮流访问网站。这里我们使用Python中的random库来随机选择账号。

import requests

import random


# 用户列表

users = [

    {'username': 'user1', 'password': 'password1'},

    {'username': 'user2', 'password': 'password2'},

    {'username': 'user3', 'password': 'password3'}

]


# 随机选择一个账号

user = random.choice(users)


# 构造登录信息

data = {

    'username': user['username'],

    'password': user['password']

}


# 请求登录URL

login_url = 'https://www.example.com/login'

response = requests.post(login_url, data=data)


# 输出响应内容

print(response.text)

总结

总的来说,伪装的目的是让爬虫看起来更像人类行为,反“反爬”的目的是应对复杂的反爬虫机制。在实际爬虫项目中,需要根据具体情况选择合适的伪装和反“反爬”技巧。



标签:python,反爬,爬虫,Agent,url,User,import,requests,response
From: https://blog.51cto.com/u_16022798/7047710

相关文章

  • python调用zabbix api接口实时展示数据
    zabbixapi接口来进行展示。经过思考之后,计划获取如下内容:  1、  获得认证密钥  2、  获取zabbix所有的主机组  3、  获取单个组下的所有主机  4、  获取某个主机下的所有监控项  5、  获取某个监控项的历史数据  6、  获取某个监控项的......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-11-playwright操作iframe-上篇
    1.简介原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了。但是还是有小伙伴或者童鞋们私下问这个问题,那么宏哥就单独写一篇关于iframe网页处理的文章。iframe是web自动......
  • VS2019 C++ 调用python函数/类对象的方法
    1.环境配置VS工程配置要和python一致,安装的python如果是64位的,工程配置也要选成64位的在工程配置中添加包含目录和库目录,添加python环境目录里的include和libs文件夹路径。想要运行的keras-yolo3是在Anaconda中配置的环境,所以相应的文件夹路径可以在Anaconda的环境文件中......
  • linux python版本切换alternatives
    查看发现linux的python3命令指向alternativesalternatives是Linux系列操作系统的一个内置命令,即使最小化安装也有该命令,它的主要作用就是版本控制切换,比如,你的系统内有多个Python版本,Python3.8,Python2.7.5,Python3.6,。[root@santiagod-andibleopenstack-ansible]#find/usr/b......
  • Python打印类的属性
    一、使用__dict__打印类的属性classPerson:def__init__(self,name,age):self.name=nameself.age=ageperson=Person("Tom",18)print(person.__dict__)使用__dict__方法可以直接打印出类的属性及其对应的值。上述代码中,我们首先定义了一个Pe......
  • [数据分析与可视化] Python绘制数据地图5-MovingPandas绘图实例
    MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库,用于处理移动物体的轨迹数据。关于MovingPandas的使用见文章:MovingPandas入门指北,本文主要介绍三个MovingPandas的绘图实例。MovingPandas官方仓库地址为:movingpandas。MovingPandas官方示例代码仓库地址为:movin......
  • python在抛出错误raise时,如何将相关信息一同携带出来(抛出自定义对象)?
    示例代码示例classMyClass(Exception):def__init__(self,info):self.info=infodefmy_method(self):print('MyClass.my_methodprintself.info:',self.info)try:raiseMyClass('错误信息')exceptMyClassase:......
  • 时序分析:Python 中的 ARIMA 模型
    推荐:使用NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景什么是ARIMA模型?ARIMA模型是用于分析和预测时间序列数据的统计模型。ARIMA方法明确迎合了时间序列中的标准结构,为制作熟练的时间序列预测提供了一种简单而强大的方法。ARIMA代表自回归积分移动平均线。它结合了三......
  • 2.0 Python 数据结构与类型
    数据类型是编程语言中的一个重要概念,它定义了数据的类型和提供了特定的操作和方法。在python中,数据类型的作用是将不同类型的数据进行分类和定义,例如数字、字符串、列表、元组、集合、字典等。这些数据类型不仅定义了数据的类型,还为数据提供了一些特定的操作和方法,例如字符串支持......
  • Python处理Nginx配置的实现方法
    Nginx是一个高性能的Web服务器和反向代理服务器,它可以用于实现多种功能。在实际应用中,我们可能需要根据不同的需求修改Nginx的配置文件。本文将介绍如何使用Python来处理Nginx配置文件。一、安装必要的库为了方便地操作Nginx配置文件,我们需要安装一些Python库。其中,pyparsing和ngin......