Requests什么的通通爬不了的Python超强反爬虫方案!

Requests什么的通通爬不了的Python超强反爬虫方案!

在网络爬虫中,反爬虫技术是非常常见的,其目的是为了防止过多的数据抓取和恶意软件对网站造成的影响。对于网站作者来讲,为了保护自己的数据,也需要具备反爬虫的能力。本文将介绍一种Python超强反爬虫方案,使用Pyppeteer与Selenium技术,以及动态User-Agent与代理IP等技术来防护反爬虫。

步骤一:安装Pyppeteer与Selenium

安装Pyppeteer

Pyppeteer是一个Python版的Headless Chrome工具库,能够实现Javascript渲染动态页面,为爬虫进一步进行反爬虫提供了可能。Pyppeteer的安装可以通过pip来完成:

pip install pyppeteer

安装Selenium

Selenium可以模拟人类对浏览器的操作,与Pyppeteer结合使用,能够实现反爬虫技术中的"动态渲染页面"的技术难点。Selenium的安装同样可以通过pip来进行:

pip install selenium

步骤二:使用Pyppeteer与Selenium进行反爬虫

使用Pyppeteer

Pyppeteer可以使用async/await来进行异步操作。在使用Pyppeteer时,只需要设置一个启动项就可以了:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=True)
    page = await browser.newPage()
    await page.goto('http://example.com')
    await page.screenshot({'path': 'example.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

在上面的代码中,我们首先通过Pyppeteer的launch方法创建了一个浏览器实例,然后通过newPage方法创建了一个网页,再通过goto方法访问了网页,并通过screenshot方法生成了一个网页截图。最后关闭了浏览器实例。

使用Selenium

Selenium可以配合各种常见的网站浏览器进行操作。在使用Selenium时,首先我们需要选择一个浏览器驱动,这里以Chrome为例:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://example.com")

在上面的代码中,我们首先导入webdriver模块,然后通过webdriver.Chrome()方法创建了一个Chrome的浏览器驱动实例,最后通过get方法访问了一个网页。Selenium还提供了许多常用的方法,如find_element_by_css_selector等,可以帮助我们方便地定位网页上的元素。

步骤三:使用动态User-Agent与代理IP

在使用Pyppeteer与Selenium进行反爬虫时,还需要注意一些常见的反爬虫策略。为了减少被禁止访问的风险,我们需要对请求头设置合理的User-Agent。同时,也可以使用代理IP来规避反爬虫设施:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options 
import random

user_agent_list = [
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1065.0 Safari/536.3',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'
]

def get_random_user_agent():
    return random.choice(user_agent_list)

chrome_options = Options()
chrome_options.add_argument('user-agent={0}'.format(get_random_user_agent()))
chrome_options.add_argument('--proxy-server=http://{0}'.format(proxy))

driver = webdriver.Chrome(chrome_options=chrome_options)

在上面的代码中,我们通过random.choice方法从user_agent_list中随机选择一个User-Agent,并使用chrome_options.add_argument方法将它添加到请求头中。同时,也可以使用代理IP,通过设置--proxy-server选项来进行配置。这样,在与Pyppeteer与Selenium进行反爬虫时,就可以更好地规避反爬虫策略,保障自己的数据和隐私。

示例一:使用Pyppeteer与Selenium获取豆瓣电影TOP250的数据

import asyncio
from pyppeteer import launch
from selenium import webdriver

async def get_movie_data():
    browser = await launch(headless=True)
    page = await browser.newPage()
    await page.goto('https://movie.douban.com/top250')
    await page.evaluate('window.scrollTo(0, document.body.scrollHeight)')  # 模拟滚动到底部
    html = await page.content()
    browser.close()

    driver = webdriver.Chrome()
    driver.get(html)
    elements = driver.find_elements_by_css_selector('.item')
    for element in elements:
        title = element.find_element_by_css_selector('.title').text
        rating_num = element.find_element_by_css_selector('.rating_num').text
        print('{0} {1}'.format(title, rating_num))

asyncio.get_event_loop().run_until_complete(get_movie_data())

在上面的示例中,我们首先通过Pyppeteer访问豆瓣电影TOP250的网页,并模拟滚动到底部。然后从浏览器中获取到渲染后的HTML,并使用Selenium来解析HTML,获取到了电影名称和评分,并将它们输出到控制台上。

示例二:使用动态User-Agent和代理IP访问知乎

import random
from selenium import webdriver
from selenium.webdriver.chrome.options import Options 

user_agent_list = [
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1065.0 Safari/536.3',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'
]

proxy = 'your.proxy.com:8080'

def get_random_user_agent():
    return random.choice(user_agent_list)

chrome_options = Options()
chrome_options.add_argument('user-agent={0}'.format(get_random_user_agent()))
chrome_options.add_argument('--proxy-server=http://{0}'.format(proxy))

driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www.zhihu.com")

在上面的示例中,我们使用了一个随机的User-Agent,并设置了代理IP,然后通过Selenium来访问知乎的网站。通过这样的方式,我们可以规避知乎的反爬虫策略,访问它的数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Requests什么的通通爬不了的Python超强反爬虫方案! - Python技术站

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

相关文章

  • 获取Python中导入模块的文件相对路径的文件路径

    【问题标题】:Get Path of File Relative Path of File that Imported Module in Python获取Python中导入模块的文件相对路径的文件路径 【发布时间】:2023-04-03 02:45:01 【问题描述】: 我在my_program.py中有这个代码: from my_module impor…

    Python开发 2023年4月8日
    00
  • 详解Python_shutil模块

    当需要在Python中进行文件和文件夹的操作时,shutil模块提供了一些方便的函数。以下是使用shutil模块的一些示例和功能: 复制文件和文件夹 使用”copy”函数,可以轻松复制单个文件: import shutil shutil.copy(‘/path/to/file’, ‘/path/to/destination’) 它还可以复制整个文件夹: im…

    python 2023年6月3日
    00
  • Python中的日期时间处理详解

    Python中的日期时间处理详解 在Python中,处理日期时间是一个很重要的任务。Python提供了多种内置模块和库来帮助处理日期时间,例如datetime、time、calendar、dateutil等等。本文将全面详解Python中的日期时间处理,包括日期时间表示、日期时间计算、日期时间格式化等精髓内容。 日期时间表示 Python中最常用的日期时间表…

    python 2023年6月2日
    00
  • python tkinter中的锚点(anchor)问题及处理

    Python tkinter是一个基于Tk GUI工具包的Python图形用户界面(GUI)的标准Python接口。在tkinter中,锚点(anchor)可以指定控件在所在父容器中的位置。这个问题在GUI界面的开发中非常常见,不同的设计方式需要控件在界面中位置的不同。 以下是python tkinter中锚点问题及处理的完整攻略: 锚点的常见取值 在tki…

    python 2023年6月13日
    00
  • EM算法的python实现的方法步骤

    以下是关于“EM算法的Python实现的方法步骤”的完整攻略: 简介 EM算法是一种常用的统计学习算法,用于估计含有隐变量的概率模型参数。在本教程中,我们将介绍如何使用Python实现EM算法,并提供两个示例。 方法步骤 EM算法的Python实现方法步骤如下: 初始化模型参数,包括隐变量的初始值和模型参数的初始值。 E步骤:根据当前模型参数和观测数据,计算…

    python 2023年5月14日
    00
  • python 时间处理之月份加减问题

    下面就为大家详细讲解”python 时间处理之月份加减问题”的完整攻略。 一、问题描述 我们在使用Python处理时间日期的时候,经常需要进行加减操作获取想要的日期。但是,在进行月份加减的时候,很容易遇到一些问题,特别是跨年的情况,导致结果不符合预期。下面我们就来探讨一下如何正确地进行月份加减。 二、错误的操作示例 我们先来看一个错误的操作示例: impor…

    python 2023年6月2日
    00
  • Python全景系列之数据类型大盘点

    Python全景系列之数据类型大盘点 本攻略将详细讲解Python的数据类型,包括基本数据类型、容器类型以及自定义类型。我们将从数据类型的概念、特点、使用场景等方面全方位地介绍Python的数据类型。 1. 基本数据类型 1.1 数字类型 Python中的数字类型包括整数类型(int)、浮点数类型(float)、复数类型(complex)。它们都支持基本运算…

    python 2023年5月30日
    00
  • Python 如何定义匿名或内联函数

    下面是Python如何定义匿名或内联函数的完整攻略。 1. 什么是匿名函数 Python中的匿名函数也称为Lambda函数,是一种没有名称的函数,通常用在函数需要作为参数传递给其他函数的场合中。Lambda函数是一种临时构建的小型函数,它可以接受任意多个参数并返回一个表达式计算的结果。 2. 如何定义匿名函数 Python中定义Lambda函数的语法非常简洁…

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