数据爬取技术进阶:从表单提交到页面点击的实现

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,1000CU*H 3个月
简介: 本文介绍了如何使用 Python 和代理 IP 技术,从表单提交到页面点击,实现动态网页的数据爬取。以百度贴吧为例,详细讲解了登录、发帖和数据采集的实现流程,并提供了完整的代码示例。通过代理 IP 确保数据获取的稳定性和安全性。

爬虫代理.png

引言

随着互联网的迅速发展,数据需求日益多样化。简单的静态页面爬取已难以满足现代应用场景的需求,特别是在涉及到登录、表单提交、页面点击等交互操作的情况下,数据的获取变得更加复杂。为了解决这些难题,使用代理 IP 是必不可少的手段,它能有效规避网站的反爬虫机制,防止 IP 被封禁。本文将结合 Python 和代理 IP 技术,详细讲解如何从表单提交到页面点击,完成动态网页的数据爬取。

百度贴吧作为中文社区平台,涵盖了资讯、视频、图片、知道、文库等多个领域,为用户提供了广泛的交流与分享空间。贴吧的分类覆盖面极广,包括娱乐明星、体育、小说、生活、游戏、动漫、地区等,几乎涉及用户日常生活的方方面面。这种多样化的内容布局不仅为数据爬取提供了丰富的数据源,也显著增加了爬取的复杂性和技术挑战。

正文

1. 表单提交和页面点击概述

在现代网页中,许多数据需要通过用户交互才能显示。这种交互包括表单提交、页面点击、动态加载等。我们可以利用 Python 的 requestsSelenium 库来模拟这些用户行为,实现表单提交和页面点击等操作。

  • 表单提交:常用于登录界面、搜索功能,模拟用户填写表单并提交请求。
  • 页面点击:用于模拟用户点击网页按钮或链接,触发动态内容加载。

2. 使用代理 IP

在进行大规模爬取时,代理 IP 是绕过反爬虫机制的关键。本文将使用爬虫代理服务进行配置,通过在请求中添加代理,避免因频繁请求导致 IP 被限制。

代理配置示例

# 配置IP信息 亿牛云爬虫代理加强版 www.16yun.cn
proxy = {
   
    "http": "http://用户名:密码@域名:端口",
    "https": "https://用户名:密码@域名:端口"
}

3. 实现流程

为了演示表单提交和页面点击的实际应用,本文选择百度贴吧(https://tieba.baidu.com/index.html)作为爬取目标。实现流程如下:

  1. 使用代理 IP 和伪装请求头:避免被检测为爬虫。
  2. 模拟登录获取 Cookie:通过 Selenium 模拟登录操作。
  3. 发帖和页面点击操作:在贴吧内模拟发帖和页面交互。
  4. 采集帖子数据:获取指定贴吧内的帖子列表和详情。

实例代码

环境准备

安装所需 Python 库和浏览器驱动:

pip install requests selenium

下载并安装 ChromeDriver:ChromeDriver 下载链接

代码实现

import time
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

# 配置IP信息 亿牛云爬虫代理加强版 www.16yun.cn
proxy_host = "proxy.16yun.cn"
proxy_port = "12345"
proxy_user = "your_username"
proxy_pass = "your_password"


proxy = {
   
    "http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
    "https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}

# 请求头配置
headers = {
   
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 初始化 Selenium 驱动
def init_driver():
    options = Options()
    options.add_argument(f'--proxy-server={proxy["http"]}')
    options.add_argument('--headless')  # 无头模式
    options.add_argument('--disable-gpu')
    options.add_argument('--ignore-certificate-errors')

    service = Service(executable_path='path/to/chromedriver')
    driver = webdriver.Chrome(service=service, options=options)
    return driver

# 模拟登录百度贴吧
def login_tieba(driver):
    driver.get("https://tieba.baidu.com/index.html")

    # 点击登录按钮
    login_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.LINK_TEXT, "登录"))
    )
    login_button.click()

    time.sleep(3)

    # 切换到用户名密码登录
    driver.find_element(By.XPATH, "//p[contains(text(),'用户名密码登录')]").click()

    # 输入用户名和密码
    username_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "TANGRAM__PSP_11__userName"))
    )
    username_input.send_keys("your_baidu_username")

    password_input = driver.find_element(By.ID, "TANGRAM__PSP_11__password")
    password_input.send_keys("your_baidu_password")

    # 点击登录
    login_submit = driver.find_element(By.ID, "TANGRAM__PSP_11__submit")
    login_submit.click()

    time.sleep(5)
    print("登录成功")

# 发帖功能
def post_tieba(driver):
    driver.get("https://tieba.baidu.com/f?kw=python")

    post_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//a[contains(@class,'j_th_tit')]"))
    )
    post_button.click()

    title_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "tb-editor-editarea"))
    )
    title_input.send_keys("Python爬虫发帖测试")

    content_input = driver.find_element(By.CLASS_NAME, "tb-editor-editarea")
    content_input.send_keys("这是通过Python脚本自动发帖的测试内容。")

    submit_button = driver.find_element(By.CLASS_NAME, "j_submit_btn")
    submit_button.click()

    print("发帖成功")

# 采集帖子数据
def scrape_posts(driver):
    driver.get("https://tieba.baidu.com/f?kw=python")
    posts = driver.find_elements(By.CLASS_NAME, 'j_th_tit')
    for post in posts[:5]:
        print(post.text, post.get_attribute('href'))

# 主程序入口
if __name__ == "__main__":
    driver = init_driver()
    try:
        login_tieba(driver)
        post_tieba(driver)
        scrape_posts(driver)
    finally:
        driver.quit()

结论

本文通过 Python 的 requestsSelenium 库,结合代理 IP 技术,详细展示了如何在动态网页环境下实现从表单提交到页面点击的数据爬取。选取百度贴吧作为示例,完整演示了登录、发帖和数据采集的流程。

通过本案例可以看出,在面对现代网页复杂的交互和反爬机制时,结合代理 IP、模拟浏览器操作和请求伪装,是实现高效数据爬取的关键。

相关文章
|
应用服务中间件 数据安全/隐私保护 nginx
Gitlab----使用Docker方式安装部署Gitlab
Gitlab----使用Docker方式安装部署Gitlab
13140 1
Gitlab----使用Docker方式安装部署Gitlab
|
11月前
|
存储 关系型数据库 数据库
极简开发,极速上线:构建端到端大模型应用
本文将以一个经典的 RAG(检索增强生成)知识问答系统为例,详细介绍从智能体设计到最终应用部署的全流程。
1666 82
|
监控 安全 数据安全/隐私保护
确保数据安全与隐私保护的数据治理最佳实践
【8月更文第13天】随着数据成为企业最重要的资产之一,数据安全和隐私保护变得至关重要。本文将探讨数据治理中的一些最佳实践,并提供具体的代码示例来说明如何实施这些策略。
2456 4
|
9月前
|
机器学习/深度学习 缓存 自然语言处理
《DeepSeek推理加速术:高效响应的秘密武器》
DeepSeek是一款备受瞩目的语言模型,通过架构优化、量化技术、缓存机制及分布式推理等手段,在推理速度上取得显著优势。它在文本生成、智能客服等任务中表现出色,极大提升了用户体验和效率。特别是在处理长序列文本时,DeepSeek的优化注意力机制大幅降低了计算复杂度,使其在新闻写作、舆情分析等场景中能够快速生成高质量内容。此外,量化技术和分布式推理进一步减少了计算开销,拓展了计算能力,为自然语言处理的广泛应用奠定了坚实基础。
495 0
|
11月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
Linux 开发工具 数据安全/隐私保护
搭建 Git 私人服务器完整指南
本文详细介绍了如何从零开始搭建一个私人的 `Git` 服务器。首先,文章解释了 `Git` 的概念及其优势,并阐述了搭建私人 `Git` 服务器的重要性,包括数据隐私、定制化需求及成本效益。接着,文章分步骤指导读者完成服务器的准备工作,包括操作系统、硬件和网络要求。随后,详细介绍了在不同操作系统上安装 `Git` 的方法,并演示了如何创建 `git` 用户、部署仓库以及设置免密登录。此外,还提供了客户端连接远程仓库的具体步骤,包括 Linux 和 Windows 的操作方式。最后,文章探讨了迁移仓库的方法以及搭建 `Git` 服务器的一些进阶选项。
4551 0
搭建 Git 私人服务器完整指南
|
12月前
|
人工智能 开发者
再次获奖!世界互联网大会把荣誉给了通义大模型
再次获奖!世界互联网大会把荣誉给了通义大模型
213 11
|
12月前
|
存储 监控 安全
监控员工上网的软件:Flow 语言的静态检查应用
在数字化办公环境中,企业对员工上网行为的监控日益重要。基于 Flow 语言的静态检查应用可确保程序的正确性和安全性,帮助开发人员发现潜在问题,提高企业信息安全性与工作效率。示例代码展示了如何使用 Flow 检查网络请求和监控员工上网行为。
151 11
信不信?工作这么多年,还有很多网工不知道光模块光衰的正常范围?
信不信?工作这么多年,还有很多网工不知道光模块光衰的正常范围?
1442 2
|
JavaScript 前端开发 Linux
安装node2-22
安装node2-22