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

yizhihongxing

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拼接字符串的7种方式详解

    以下是“Python拼接字符串的7种方式详解”的完整攻略。 1. 什么是字符串拼接 字符串拼接是指将多个字符串连接成一个字符串的操作。在Python中,字符串拼接多种方式,可以根据实际需求选择不同的方式。 2. 7种字符串拼接方式 2.1 使用加号(+)拼接字符串 # 使用加号(+)拼接字符串 str1 = "Hello" str2 = …

    python 2023年5月13日
    00
  • Python Unittest ddt数据驱动的实现

    Python Unittest和ddt数据驱动是开发Python单元测试时常用的两个工具,结合使用可以大大提升测试效率和覆盖率。下面是一个完整的攻略,包括安装、使用和两个示例说明。 1. 安装 在使用之前,应该先安装Python Unittest和ddt库: pip install unittest pip install ddt 2. 使用 在编写Pyth…

    python 2023年6月3日
    00
  • Python利用PyPDF2快速拆分PDF文档

    针对“Python利用PyPDF2快速拆分PDF文档”的攻略,我会分为以下几个部分来进行详细讲解: 环境准备 PyPDF2安装 加载PDF文档 拆分文档 示例说明 接下来我会逐一进行讲解。 1. 环境准备 在开始之前,请确保你已经安装好了Python解释器,并且在命令行或终端中可以执行python命令。另外,由于我们要用到PyPDF2库,所以我们需要先安装它…

    python 2023年6月5日
    00
  • 如何处理Python3.4 使用pymssql 乱码问题

    接下来我会详细讲解如何处理Python3.4使用pymssql乱码问题的完整攻略。 问题描述 在Python3.4中使用pymssql连接Microsoft SQL Server数据库时,可能会出现中文乱码的问题。 解决方法 1. 设置字符集 通过设置连接字符集来解决中文乱码的问题。默认情况下,pymssql使用的是iso-8859-1字符集,而我们通常使用…

    python 2023年5月20日
    00
  • 基于Mediapipe+Opencv实现手势检测功能

    基于Mediapipe+Opencv实现手势检测功能攻略 手势检测是计算机视觉相关领域的一个重要问题,可以应用于很多领域,如交互式系统、游戏开发、可穿戴设备等。Mediapipe是谷歌发布的一个实时计算机视觉处理框架,而OpenCV是一个开源的计算机视觉库,综合使用这两个工具可以实现手势检测功能。 本攻略将详细介绍如何基于Mediapipe和OpenCV实现…

    python 2023年6月6日
    00
  • 18 个 Python 编程技巧,提高工作效率

    下面我将为大家详细讲解“18 个 Python 编程技巧,提高工作效率”的完整攻略。 1. 列表解析(List comprehension) 列表解析是 Python 的一项强大而又实用的功能,它可以使用更少的代码来创建或修改列表。例如,你可以使用以下代码创建一个包含 1 到 10 的数字的列表: numbers = [x for x in range(1,…

    python 2023年5月13日
    00
  • 一个超级简单的python web程序

    下面我将为您详细讲解一个超级简单的Python web程序的完整攻略。 步骤一:搭建开发环境 首先,我们需要搭建Python开发环境。可以使用Anaconda、Python官网提供的Python安装包、或者其他第三方Python解释器等。 步骤二:安装web框架 在Python中提供了多个web框架,例如Django、Flask、Bottle等,这里我们选择…

    python 2023年5月31日
    00
  • Python提取网页中超链接的方法

    在Python中,我们可以使用BeautifulSoup库来提取网页中的超链接。以下是Python提取网页中超链接的方法的完整攻略: 使用requests库获取网页内容 使用BeautifulSoup库解析网页内容 使用find_all()方法查找所有超链接 示例说明 使用requests库获取网页内容 在Python中,我们可以使用requests库来获取…

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