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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 本文介绍了如何使用 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、模拟浏览器操作和请求伪装,是实现高效数据爬取的关键。

相关文章
|
8月前
|
数据采集 Web App开发 JSON
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
本文以百度为实战案例演示使用WebScraper插件抓取页面内容保存到文件中。以及WebScraper用法【2月更文挑战第1天】
592 2
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
|
2月前
|
数据采集 机器学习/深度学习 供应链
用Puppeteer点击与数据爬取:实现动态网页交互
本文介绍了如何使用Puppeteer和代理IP抓取51job招聘信息。Puppeteer作为强大的浏览器自动化工具,能模拟用户操作、加载动态数据,结合代理IP技术可以提高抓取成功率并避免IP封禁。文章详细阐述了招聘信息的价值和市场应用,以及大数据分析在招聘信息采集中的应用。通过具体实现步骤和示例代码,展示了如何设置代理、模拟用户操作、抓取和分析数据,为企业和求职者提供有价值的市场洞察。
183 1
用Puppeteer点击与数据爬取:实现动态网页交互
|
5月前
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
100 5
|
7月前
|
数据采集 JavaScript 前端开发
详尽分享网站网页中加入各种分享按钮功能百度分享
详尽分享网站网页中加入各种分享按钮功能百度分享
141 0
|
前端开发 JavaScript 数据库
layui框架实战案例(20):常用条件判断和信息展示技巧(图片预览、动态表格、短信已读未读、链接分享、信息脱敏、内置框架页)
layui框架实战案例(20):常用条件判断和信息展示技巧(图片预览、动态表格、短信已读未读、链接分享、信息脱敏、内置框架页)
651 0
|
Web App开发 网络协议 网络安全
面试:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?
经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?
|
数据采集 开发者 Python
如何使用Scrapy框架爬取301跳转后的数据
如何使用Scrapy框架爬取301跳转后的数据
|
缓存 网络协议 前端开发
浏览器原理 04 # 导航流程:从输入URL到页面展示,这中间发生了什么?
浏览器原理 04 # 导航流程:从输入URL到页面展示,这中间发生了什么?
222 0
浏览器原理 04 # 导航流程:从输入URL到页面展示,这中间发生了什么?
|
移动开发 前端开发 IDE
「趣学前端」日常浏览的页面是怎么实现出来的
用技术实现梦想,用梦想打开创意之门。为了给不懂技术的朋友讲解日常开发中怎么实现网页的效果,我准备出一个系列。
148 1
|
前端开发 IDE 开发工具
「趣学前端」日常浏览的页面为什么可以五颜六色
用技术实现梦想,用梦想打开创意之门。为了给不懂技术的朋友讲解日常开发中怎么实现网页的效果,我准备出一个系列。
159 1