当前位置: 首页 > article >正文

爬虫日常练习

1.反webdriver自动化检测爬取

有的网站会有检测webdriver的反爬手段,这时候就需要做一些操作防止被网页检测到,下面直接给出固定代码段方法:

from selenium.webdriver.support.ui import WebDriverWait

# 配置 ChromeOptions 防止被检测
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--incognito")  # 使用隐身模式
# options.add_argument('--headless')  # 无头浏览,开发和调试时可以注释掉这行

# 创建 WebDriver 实例
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
    })
    """
})
wait = WebDriverWait(driver, 10)

网站实战反反爬:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.ui import WebDriverWait

# 配置 ChromeOptions 防止被检测
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--incognito")  # 使用隐身模式
# options.add_argument('--headless')  # 无头浏览,开发和调试时可以注释掉这行

# 创建 WebDriver 实例
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
    })
    """
})
wait = WebDriverWait(driver, 10)
driver.get('https://antispider1.scrape.center/')
time.sleep(5)
all_data_dict = {}
for i in range(10):
    titles = driver.find_elements(By.XPATH, '//*[@id="index"]/div[1]/div[1]/div/div/div/div[2]/a/h2')
    grades = driver.find_elements(By.XPATH, '//*[@id="index"]/div[1]/div[1]/div/div/div/div[3]/p[1]')
    data_dict = {}
    for title, grade in zip(titles, grades):
        data_dict[title.text] = grade.text

    all_data_dict.update(data_dict)
    print(f"页数 {i + 1}: {data_dict}")
    try:
        search_next = driver.find_element(By.XPATH, '//*[@id="index"]/div[2]/div/div/div/button[2]/i').click()
        time.sleep(3)
    except Exception as e:
        print(f"单击下一页出错:{e}")

# 打印所有页面的数据
print('-' * 80)
print("所有数据:", all_data_dict)
time.sleep(3)
driver.quit()

2.boss直聘多页爬取

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get('https://www.zhipin.com/?ka=header-home-logo')
time.sleep(3)

searching = driver.find_element(By.XPATH, '//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[2]/p/input')
searching.send_keys('大数据爬虫')
time.sleep(3)
searching.send_keys(Keys.ENTER)
time.sleep(10)
for i in range(3):
    titles = driver.find_elements(By.XPATH, '//span[@class="job-name"]')
    prices = driver.find_elements(By.XPATH, '//span[@class="salary"]')
    for title, price in zip(titles, prices):
        print(f'正在爬取第{i+1}页......')
        print(f'职位名称:{title.text}')
        print(f'薪资:{price.text}')

    search_next = driver.find_element(By.XPATH, '//i[@class="ui-icon-arrow-right"]').click()
    time.sleep(3)

time.sleep(10)
driver.quit()

http://www.kler.cn/a/393971.html

相关文章:

  • C语言 | Leetcode C语言题解之第556题下一个更大元素III
  • DNS面临的4大类共计11小类安全风险及防御措施
  • 金价大跌,特朗普胜选或成导火索
  • P8680 [蓝桥杯 2019 省 B] 特别数的和
  • SpringBoot后端解决跨域问题
  • 《JavaEE进阶》----20.<基于Spring图书管理系统①(登录+添加图书)>
  • 鸿蒙UI开发——使用动画曲线
  • git入门环境搭建
  • 电商系统设计与实现:Spring Boot框架
  • Linux下MySQL的安装(Centos7)
  • 界面控件DevExpress WPF中文教程:TreeList视图及创建分配视图
  • 大模型学习笔记------BLIP模型的再思考
  • 1. kafka分布式环境搭建
  • Vue全栈开发旅游网项目(10)-用户管理后端接口开发
  • selenium 控制内嵌table滚动条的方法
  • RabbitMQ-死信队列(golang)
  • CouchdbH2database未授权
  • CSS回顾-长度单位汇总详解
  • 基于大语言模型意图识别和实体提取功能;具体ZK数值例子:加密货币交易验证;
  • Unity学习---IL2CPP打包时可能遇到的问题
  • 视图【MySQL】
  • 深入探究 Linux 系统的快照备份与恢复:TimeShift 实践与原理解析
  • Android 无签名系统 debug 版本APK push到设备引起的开机异常问题分析(zygote进程)
  • 【青牛科技】14W 高保真音频放大电路——D2030
  • 大数据新视界 -- 大数据大厂之 Impala 存储格式转换:从原理到实践,开启大数据性能优化星际之旅(下)(20/30)
  • Linux入门:环境变量与进程地址空间