Python 爬虫开发

news2025/7/14 18:40:43

文章目录

  • 1. 常用库安装
  • 2. 基础爬虫开发
    • 2.1. 使用 requests 获取网页内容
    • 2.2. 使用 BeautifulSoup 解析 HTML
    • 2.3. 处理登录与会话
  • 3. 进阶爬虫开发
    • 3.1. 处理动态加载内容(Selenium)
    • 3.2. 使用Scrapy框架
    • 3.3. 分布式爬虫(Scrapy-Redis)
  • 4. 爬虫优化与反反爬策略
    • 4.1. 常见反爬机制及应对
    • 4.2. 代理IP使用示例
    • 4.3. 随机延迟与请求头

BeautifulSoup 官方文档
https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/
https://cloud.tencent.com/developer/article/1193258
https://blog.csdn.net/zcs2312852665/article/details/144804553

参考:
https://blog.51cto.com/haiyongblog/13806452

1. 常用库安装

pip install requests beautifulsoup4 scrapy selenium pandas

2. 基础爬虫开发

2.1. 使用 requests 获取网页内容

import requests

url = 'https://top.baidu.com/board?tab=realtime'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}

response = requests.get(url, headers=headers)
print(response.status_code)     # 200表示成功
print(response.text[:500])      # 打印前500个字符

在这里插入图片描述

2.2. 使用 BeautifulSoup 解析 HTML

from bs4 import BeautifulSoup

html_doc = """
            <html><head><title>测试页面</title></head>
            <body>
            <p class="title"><b>示例网站</b></p>
            <p class="story">这是一个示例页面
            <a href="http://example.com/1" class="link" id="link1">链接1</a>
            <a href="http://example.com/2" class="link" id="link2">链接2</a>
            </p>
            """

soup = BeautifulSoup(html_doc, 'html.parser')

# 获取标题
print(soup.title.string)

# 获取所有链接
for link in soup.find_all('a'):
    print(link.get('href'), link.string)

# 通过CSS类查找
print(soup.find('p', class_='title').text)

2.3. 处理登录与会话

import requests

login_url = 'https://example.com/login'
target_url = 'https://example.com/dashboard'

session = requests.Session()

# 登录请求
login_data = {
    'username': 'your_username',
    'password': 'your_password'
}

response = session.post(login_url, data=login_data)

if response.status_code == 200:
    # 访问需要登录的页面
    dashboard = session.get(target_url)
    print(dashboard.text)
else:
    print('登录失败')

3. 进阶爬虫开发

3.1. 处理动态加载内容(Selenium)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# 设置无头浏览器
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 无界面模式
options.add_argument('--disable-gpu')

# 自动下载chromedriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

url = 'https://dynamic-website.com'
driver.get(url)

# 等待元素加载(隐式等待)
driver.implicitly_wait(10)

# 获取动态内容
dynamic_content = driver.find_element(By.CLASS_NAME, 'dynamic-content')
print(dynamic_content.text)

driver.quit()

3.2. 使用Scrapy框架

# 创建Scrapy项目
# scrapy startproject example_project
# cd example_project
# scrapy genspider example example.com

# 示例spider代码
import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/']

    def parse(self, response):
        # 提取数据
        title = response.css('title::text').get()
        links = response.css('a::attr(href)').getall()
        
        yield {
            'title': title,
            'links': links
        }

# 运行爬虫
# scrapy crawl example -o output.json

3.3. 分布式爬虫(Scrapy-Redis)

# settings.py配置
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_URL = 'redis://localhost:6379'

# spider代码
from scrapy_redis.spiders import RedisSpider

class MyDistributedSpider(RedisSpider):
    name = 'distributed_spider'
    redis_key = 'spider:start_urls'

    def parse(self, response):
        # 解析逻辑
        pass

4. 爬虫优化与反反爬策略

4.1. 常见反爬机制及应对

User-Agent检测 :随机切换User-Agent
IP限制:使用代理IP池
验证码:OCR识别或打码平台
行为分析:模拟人类操作间隔
JavaScript渲染:使用Selenium或Pyppeteer

4.2. 代理IP使用示例

import requests

proxies = {
    'http': 'http://proxy_ip:port',
    'https': 'https://proxy_ip:port'
}

try:
    response = requests.get('https://example.com', proxies=proxies, timeout=5)
    print(response.text)
except Exception as e:
    print(f'请求失败: {e}')

4.3. 随机延迟与请求头

import random
import time
import requests
from fake_useragent import UserAgent

ua = UserAgent()

def random_delay():
    time.sleep(random.uniform(0.5, 2.5))

def get_with_random_headers(url):
    headers = {
        'User-Agent': ua.random,
        'Accept-Language': 'en-US,en;q=0.5',
        'Referer': 'https://www.google.com/'
    }
    random_delay()
    return requests.get(url, headers=headers)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2387806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十一周作业

一、实现bluecms旁注&#xff0c;并解释为什么旁站攻击可以拿下主站&#xff1f;跨库的意思是什么&#xff1f; 1、为什么旁站攻击可以拿下主站 因为主站业务和旁站业务共处于同一个服务器上面&#xff0c;当我们无法攻破主站业务时&#xff0c;可以通过攻破旁站业务&#xf…

猿大师办公助手网页编辑Office/wps支持服务器文件多线程下载吗?

浏览器兼容性割裂、信创替代迫切的2025年&#xff0c;传统WebOffice控件因依赖NPAPI/PPAPI插件已无法适配Chrome 107等高版本浏览器。猿大师办公助手通过系统级窗口嵌入技术&#xff0c;直接调用本地Office/WPS内核&#xff0c;实现&#xff1a; 真内嵌非弹窗&#xff1a;将Of…

英码科技携带 “无感知AI数字课堂”解决方案,亮相第22届广东教育装备展

5月23日至25日&#xff0c;第22届广东教育装备展览会在广州国际采购中心盛大举行。作为华为生态重要合作伙伴&#xff0c;英码科技携“无感知AI数字课堂解决方案”重磅登场&#xff0c;聚焦教学提质增效&#xff0c;为教育数字化转型注入新动能。 聚焦课堂真实场景&#xff0c;…

【R语言科研绘图】

R语言在绘制SCI期刊图像时具有显著优势&#xff0c;以下从功能、灵活性和学术适配性三个方面分析其适用性&#xff1a; 数据可视化库丰富 R语言拥有ggplot2、lattice、ggpubr等专业绘图包&#xff0c;支持生成符合SCI期刊要求的高分辨率图像&#xff08;如TIFF/PDF格式&#…

ProfiNet转Ethernet/IP网关选型策略适配西门子S7-1500与罗克韦尔ControlLogix5580的关键指标对比

一、行业背景 新能源汽车电池制造是当前工业自动化领域增长最快的细分市场之一。随着动力电池产能扩张与技术迭代&#xff0c;产线对高精度装配、实时数据交互和系统兼容性提出了更高要求。在某头部电池企业的模组装配线中&#xff0c;面临着不同品牌设备通信协议不兼容的问题&…

[图文]图6.3会计事项-Fowler分析模式的剖析和实现

1 00:00:02,090 --> 00:00:05,160 Fowler在书里面也说了&#xff0c;6.4 2 00:00:05,290 --> 00:00:07,540 这里也说了 3 00:00:08,030 --> 00:00:11,340 不是常用的 4 00:00:12,520 --> 00:00:15,060 更倾向用6.2&#xff0c;实际上就是6.3了 5 00:00:15,760 …

【Linux】shell脚本的常用命令

目录 简介 一.设置主机名称 1.1通过文件修改 1.2通过命令修改 二.网络管理命令nmcli 2.1查看网卡 2.2设置网卡 三.简单处理字符 3.1seq打印连续字符 3.2printf,echo打印字符 3.3sort排序 3.4uniq冗余处理 3.5cut对字符的截取 四.xargs输入转参 简介 以下命令都是…

Pycharm and Flask 的学习心得(9)

request对象&#xff1a; 1. request包含前端发送过来的所有请求数据 将from表单里的内容CV到request里面&#xff0c;可以添加if语句来做判断出请求类型后的操作 在网页上的表单上input的数据&#xff0c;后端如何获取呢&#xff1f; request对象获取前端发送来的数据 // …

Linux初始-环境安装(2)

文章目录 安装问题&#xff08;1-1.51.39&#xff09;xshell的下载和登录步骤xshell创建多用户与删除用户xshell免密码登录 简介&#xff1a;这篇文章我认为对于初学Linux还是非常重要的&#xff0c;正所谓磨刀不误砍柴工&#xff0c;工具环境准备好了&#xff0c;后面的学习才…

Python Day34 学习

今日内容 通过“心脏病数据集”对之前的内容进行复习&#xff0c;再进行新内容“元组和OS模块”的学习。 机器学习模型建模和评估&#xff08;先不考虑调参&#xff09; 基于之前已经预处理过的心脏病数据集 划分数据值 模型训练与模型评估 # 随机森林 rf_model RandomFo…

【ASR】基于分块非自回归模型的流式端到端语音识别

论文地址:https://arxiv.org/abs/2107.09428 摘要 非自回归 (NAR) 模型在语音处理中越来越受到关注。 凭借最新的基于注意力的自动语音识别 (ASR) 结构,与自回归 (AR) 模型相比,NAR 可以在仅精度略有下降的情况下实现有前景的实时因子 (RTF) 提升。 然而,识别推理需要等待…

国芯思辰|国产FRAM SF25C128助力监控系统高效低功耗解决方案,对标MB85RS128/FM25V01

监控系统已成为保障公共安全、维护社会秩序的重要工具。随着监控系统的不断发展&#xff0c;对数据存储的要求也越来越高&#xff0c;不仅需要大容量、高速度的存储设备&#xff0c;还要求其具备高可靠性和低功耗等特性。国产铁电存储器 SF25C128作为一种新型非易失性存储器&am…

攻防世界逆向刷题笔记(新手模式9-1?)

bad_python 看样子是pyc文件损坏了。利用工具打开&#xff0c;发现是MAGIC坏了。搜下也没有头绪。 攻防世界-难度1- bad_python - _rainyday - 博客园 python Magic Number对照表以及pyc修复方法 - iPlayForSG - 博客园 看WP才知道36已经提示了pyc版本了。参考第二个文章&am…

制作一款打飞机游戏58:子弹模式组合

今天我们将继续深入探讨子弹模式系统&#xff0c;并在我们的模式编辑器上做一些收尾工作。 子弹模式系统的乐趣 首先&#xff0c;我想说&#xff0c;这个子弹模式系统真的非常有趣。看着屏幕上不断喷射的子弹&#xff0c;感觉真是太棒了&#xff01; 合并修饰符 今天&#…

使用新一代达梦管理工具SQLark,高效处理 JSON/XML 数据!

在应用开发领域&#xff0c;JSON/XML数据结构因其灵活性和通用性&#xff0c;成为开发者存储和交换数据的首选。然而&#xff0c;传统管理工具在处理这些半结构化数据时&#xff0c;往往存在可视化效果差、编辑效率低等问题&#xff0c;严重影响开发者的工作效率。 现在&#…

深入了解PyTorch:起源、优势、发展与安装指南

深入了解PyTorch&#xff1a;起源、优势、发展与安装指南 目录 引言PyTorch简介PyTorch的优势 动态计算图直观易用的API强大的社区支持丰富的生态系统高性能与可扩展性 PyTorch的发展历程PyTorch的主要组件 Torch.TensorAutograd自动求导nn模块TorchvisionTorchText和TorchAu…

DeepSeek智能对话助手项目

目录&#xff1a; 1、效果图2、实现代码3、温度和TopK的作用对比 1、效果图 2、实现代码 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…

浅谈Mysql的MVCC机制(RC与RR隔离级别)

MVCC&#xff08;Multi-Version Concurrency Control&#xff09;多版本并发控制 说这个我们先来了解一下Mysql的隔离级别&#xff0c;因为MVCC和Mysql的隔离级别是有关的。 Mysql默认的隔离级别是RR&#xff08;可重复读&#xff09; 其他的隔离级别是读未提交&#xff08;…

uniapp-商城-72-shop(5-商品列表,购物车实现回顾)

我们通过前面的章节已经将数据添加到了购物车,但实际上购物车的处理还有很多东西需要完成。 我们看看如何将商品添加到购物车。 本文介绍了购物车功能的实现方式,重点讲解了如何将商品添加到购物车以及购物车状态管理的处理机制。主要内容包括:1. 通过Vuex管理购物车状态,包…

MySQL#Select语句执行过程

服务端程序架构 MySQL 是典型的 C/S 架构&#xff0c;即 Client/Server 架构&#xff0c;服务器端程序mysqld。 Select语句执行过程 连接层 客户端和服务器端建立连接&#xff0c;客户端发送 SQL 至服务器端 SQL层 SQL语句处理 查询缓存&#xff1a; 缓存命中该SQL执行结果直…