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日

相关文章

  • Django实现微信小程序的登录验证功能并维护登录态

    下面是详细讲解“Django实现微信小程序的登录验证功能并维护登录态”的完整攻略。 前置条件 理解Django框架的基本概念和使用方法 理解微信小程序的登录流程和API 实现思路 要实现微信小程序的登录验证功能并维护登录态,需要做以下几个步骤: 小程序发起登录请求,将code传给后台。 后台通过code向微信服务器发送请求获取session_key和open…

    python 2023年5月23日
    00
  • python登录并爬取淘宝信息代码示例

    让我来为你详细讲解一下“Python登录并爬取淘宝信息代码示例”的完整攻略。 为了登录淘宝并爬取商品信息,我们需要用到以下几个工具和库: Chrome浏览器:作为我们启动并使用selenium的浏览器。 ChromeDriver:作为我们与Chrome浏览器进行交互的工具。 selenium库:用于模拟浏览器动作,如输入、点击等操作。 re库:用于正则表达式…

    python 2023年5月14日
    00
  • Python自动化测试笔试面试题精选

    针对“Python自动化测试笔试面试题精选”的完整攻略,我来给出详细讲解。 一、背景介绍 Python自动化测试是当前比较火热的话题之一,技能的要求也越来越高。为此,许多公司在面试面试或进行笔试的时候,会涉及Python自动化测试相关的题目。这个时候,我们就需要掌握相应的知识和技能,进而成功的应对笔试或面试。 二、攻略建议 下面我来分享一些攻略建议,帮助大家…

    python 2023年5月18日
    00
  • Python Matplotlib绘制动图平滑曲线

    下面我详细讲解一下Python Matplotlib绘制动图平滑曲线的完整攻略。 导入必要的库 我们需要导入两个库,一个是Matplotlib库,另一个是NumPy库。 import matplotlib.pyplot as plt import numpy as np 定义曲线函数 我们需要定义一条曲线函数来产生曲线数据。这里我们选用的是sin函数,函数表…

    python 2023年5月18日
    00
  • 关于Python字符编码与二进制不得不说的一些事

    关于Python字符编码与二进制不得不说的一些事 什么是字符编码 字符编码是将字符映射到二进制数据的一种方法。计算机无法处理字符,因此通过字符编码将字符转换为计算机可以理解的二进制数据。 常见的字符编码 ASCII ASCII码(American Standard Code for Information Interchange)是由美国国家标准组织(ANS…

    python 2023年5月20日
    00
  • 人工智能中的顶会

    本片主要是对人工智能领域下的一些顶会进行梳理,对顶会进行了解,以后会对了解到的顶会做一个梳理,拓宽自己对顶刊顶会的认知。 如果大家有什么新的想法,非常欢迎大家一起探讨和讨论。目前只是对这些顶级会议做一个简单的说明,后续了解深入后,还会继续不断更新这部分内容。 一.CV中的顶级会议 CV中目前工人的三大顶会为: 1.CVPR 国际计算机视觉与模式识别会议(CV…

    python 2023年4月17日
    00
  • pycharm 激活码及使用方式的详细教程

    Pycharm激活码及使用方式的详细教程 什么是Pycharm? Pycharm是一款非常流行的Python IDE,被认为是Python开发最好的IDE之一,它提供了一组丰富的工具来帮助你在Python中编写代码。在Pycharm中,你可以从头开始编写代码,也可以调试代码并运行它们,还可以使用它强大的代码补全功能。 Pycharm激活方式 目前,Pycha…

    python 2023年6月3日
    00
  • 用Python自动发邮件提醒你周末吃啥

    用Python自动发邮件提醒你周末吃啥 在本攻略中,我们将介绍如何使用Python自动发邮件提醒你周末吃啥,并提供一些示例。 步骤1:设置邮箱 在使用Python自动发邮件之前,我们需要先设置邮箱。我们可以使用Python的smtplib库设置邮箱。 以下是一个示例,用于设置邮箱: import smtplib # 设置邮箱 smtp_server = ‘s…

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