Python中常见的反爬机制及其破解方法总结

yizhihongxing

Python中常见的反爬机制及其破解方法总结

1. 反爬机制简介

随着互联网技术的快速发展,数据量剧增,各种网络爬虫不断涌现,研究数据更成为人们的一项重要工作。然而,由于缺乏有效的反爬机制,爬虫爬取数据也变得越来越容易,因此各大网站也都升级了自己的反爬手段,以抵御爬虫。常见的反爬手段有以下几种:

  • IP封禁:对频繁访问、请求量过大的IP地址进行屏蔽。
  • User-Agent过滤:检查请求头中的User-Agent,对白名单以外的User-Agent进行拦截(例如,对机器人而言,User-Agent列表搜藏机器人也是一种有效的反爬手段)。
  • 验证码:分布式请求时,往往需要验证码进行验证。
  • 动态页面加载:Ajax和JavaScript动态加载,导致数据源地址的变化。
  • 带cookie认证: 登录的session验证,不同身份的用户访问同一地址,获取到的数据不同。

2. 反爬破解方法

2.1 IP封禁

  • 使用代理IP或者VPN进行请求。
  • 使用多台主机,分部进行爬取,降低单个IP的访问量。

2.2 User-Agent过滤

在爬取时,我们可以通过伪装User-Agent来避免被网站禁止访问。

例如在python中,使用requests库可以设置HTTP请求头,修改User-Agent:

import requests

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.baidu.com'
response = requests.get(url, headers=headers)

2.3 验证码

在爬取时,使用分布式爬虫框架或者使用验证码识别API,通过OCR识别验证码进行验证。

2.4 动态页面加载

使用Selenium+PhantomJS进行模拟用户操作来爬取动态加载的页面。

例如,在python中使用Selenium+PhantomJS爬去淘宝搜索页面:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.PhantomJS()#PhantomJS
browser.get('https://www.taobao.com/')

elem = browser.find_element_by_name("q")#寻找淘宝搜索窗口
elem.send_keys("迅游加速器")
elem.send_keys(Keys.RETURN)#输入关键词并模拟搜索

print(browser.page_source)#返回当前页面资源代码
browser.close()

2.5 带cookie认证

在爬取时,使用requests库中的Session对象保存cookies,在下一次请求时,传递cookies。

例如,在python中,模拟登录Github账号:

import requests

# login
session = requests.Session()
login_url = 'https://github.com/login'
response_login = session.get(login_url)


# csrf token
headers_login = response_login.headers
ghs = headers_login.setdefault('Set-Cookie', '').split(';')[0]
_, csrf_token = [c.split('=')[-1] for c in headers_login['Set-Cookie'].split(';') if c.startswith('_gh_sess=') or c.startswith('user_session=')]
headers_login['Cookie'] = ghs
headers_login['Referer'] = 'https://github.com/'
soup = bs4.BeautifulSoup(response_login.content)

form = soup.find('form')
inputs = form.find_all('input')
for _input in inputs:
    if _input.get('name') == 'commit':
        submit_value = _input.get('value')
    if _input.get('name') == 'utf8':
        utf8_value = _input.get('value')
        continue
    headers_login.setdefault(_input.get('name'), _input.get('value'))
headers_login.pop('None', None)

headers_login.update({
    'Host': 'github.com',
    'Origin': 'https://github.com',
    'Referer': 'https://github.com/login',
})

headers_login['Accept-Language'] = 'en-US,en;q=0.8'
headers_login['Content-Type'] = 'application/x-www-form-urlencoded'
data_login = {x.get('name'): x.get('value') for x in form.find_all('input')}

post_url = 'https://github.com/session'
response_post = session.post(post_url, headers=headers_login, data=data_login)

# enter the homepage of our own
entry = session.get('https://github.com/settings/profile').text

以上就是Python中常见的反爬机制及其破解方法的总结,当然,不同网站的反爬手段各不相同,所以在你的爬虫实现中也需要根据具体情况来处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中常见的反爬机制及其破解方法总结 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python 实现目录复制的三种小结

    Python 实现目录复制的三种小结 在 Python 中,实现目录复制有很多种方法,本文将介绍三种常用的方法。 方法一:使用 shutil 模块 最简单的方法就是使用 Python 自带的 shutil 模块进行目录复制。这个模块提供了很多实用的函数,其中包括 copytree() 函数可以用来实现目录复制。 示例1 import shutil # 定义源…

    python 2023年6月3日
    00
  • Python在Zip文件中打开文件[关闭]

    【问题标题】:Python opening a File within a Zip File [closed]Python在Zip文件中打开文件[关闭] 【发布时间】:2023-04-03 05:36:01 【问题描述】: 我正在尝试在 python 中打开一个带有 zip 文件的文件并将其复制到其他地方。如何处理打开的 ZIP 文件?我可以很好地复制和移动…

    Python开发 2023年4月8日
    00
  • Python 实现try重新执行

    实现 try 重新执行可以通过使用 Python 的异常处理机制来实现。在处理异常时,使用循环语句来实现 try 重新执行的功能,即如果 try 语句块中的代码抛出异常,则重新执行 try 语句块。以下是实现 try 重新执行的完整攻略: 1.编写需要尝试重新执行的代码块。在代码块之前,使用 try 语句块来尝试执行代码块。如果代码块中的代码抛出异常,则执行…

    python 2023年5月13日
    00
  • 基于python实现简单C/S模式代码实例

    下面是详细的攻略: 简介 C/S模式是计算机网络中常见的模式之一,它指的是Client-Server模式,即客户端-服务器模式。在这种模式下,服务器端提供服务,客户端向服务器发起请求并接受服务。在本攻略中,我们将使用Python实现一个简单的C/S模型。 基础知识 在开始之前,我们需要掌握以下基础知识: socket模块:用于实现网络通信; threadin…

    python 2023年5月19日
    00
  • 解决pandas中读取中文名称的csv文件报错的问题

    要解决pandas中读取中文名称的csv文件报错的问题,需要按照以下步骤进行操作: 步骤一:使用正确的编码格式 在使用pandas中读取csv文件时,如果文件中含有中文,需要指定正确的编码格式。最常用的编码格式是utf-8和gbk。具体示例如下: import pandas as pd data=pd.read_csv(‘file_with_chinese_…

    python 2023年5月20日
    00
  • 利用python库matplotlib绘制不同的图表

    下面是详细讲解“利用Python库Matplotlib绘制不同的图表”的完整攻略。 1. Matplotlib简介 Matplotlib 是一个非常流行的图形库,在数据分析和可视化方面得到了广泛应用。它可以绘制各种类型的图表,包括线图、散点图、柱状图、饼图等等。Matplotlib 提供了很多有用的函数和方法,可以灵活地控制图表的各个方面,如颜色、大小、坐标…

    python 2023年6月6日
    00
  • python内置函数之slice案例详解

    Python内置函数之Slice案例详解 在Python中,slice函数是我们经常使用的函数之一,它主要用于获取序列的子序列(即切片)。下面将对slice函数进行详细解释。 什么是Slice 在Python中,我们可以使用切片来获取序列的子序列,例如: my_list = [1, 2, 3, 4, 5] new_list = my_list[1:4] # …

    python 2023年6月3日
    00
  • python重试装饰器示例

    Python重试装饰器是一种常见的用于解决网络请求、接口调用等场景下出现错误或异常的情况。其主要工作是将函数重复执行直到成功或达到重试次数限制。下面我们将从以下几个方面详细讲解Python重试装饰器的使用攻略。 1. 装饰器原理及概念 装饰器(decorator)是Python语言中的一种特殊语法元素,用于在源代码中动态地修改函数或类定义的代码。简单来说,装…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部