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

python爬虫指南——初学者避坑篇

在这里插入图片描述

目录

      • Python爬虫初学者学习指南
        • 一、学习方向
        • 二、Python爬虫知识点总结
        • 三、具体知识点详解和实现步骤
          • 1. HTTP请求和HTML解析
          • 2. 正则表达式提取数据
          • 3. 动态内容爬取
          • 4. 数据存储
          • 5. 反爬虫应对措施
        • 四、完整案例:爬取京东商品信息
          • 1. 导入库和设置基本信息
          • 2. 获取网页内容
          • 3. 解析数据
          • 4. 保存数据到CSV
        • 5. 结果展示
          • 示例数据结构(CSV文件)
      • 五、常见学习资源

Python爬虫初学者学习指南

一、学习方向
  1. Python基础:掌握Python基础语法、文件处理、正则表达式(re模块)和数据处理(Pandas库)。
  2. HTTP与HTML解析基础:理解HTTP协议和HTML结构,学习请求库(Requests)和解析库(BeautifulSoup)。
  3. 动态页面处理:学习如何使用Selenium处理JavaScript动态加载内容。
  4. 反爬虫机制及应对方法:了解常见反爬虫机制,学习代理设置、请求头伪装、IP池等应对方法。
  5. 数据存储:学习如何将爬取的数据存储到CSV、JSON、数据库中,熟悉Pandas、SQLite等数据处理和存储工具。
  6. 实战案例:完成一些经典爬虫项目,如商品价格爬取、评论分析等,强化综合应用能力。
二、Python爬虫知识点总结
知识点描述常用方法或库
HTTP基础了解HTTP请求和响应,GET、POST、状态码等requests.get()requests.post()
HTML结构解析通过标签定位、CSS选择器、XPath解析HTML内容BeautifulSouplxml
正则表达式使用正则表达式从文本中匹配特定模式的数据re库、re.findall()
动态内容爬取处理JavaScript生成的动态数据,抓取动态加载的内容SeleniumPyppeteer
代理与请求头伪装防止被封禁,使用代理IP和伪装User-Agentrequests.Session()、代理池
Cookies处理模拟登录和保持会话,获取需要登录的页面requests.Session(), headers
数据清洗与存储清洗数据格式,保存到CSV、JSON或数据库中Pandasjsonsqlite3
多线程与异步爬取提高爬取速度,使用多线程或异步编程concurrent.futuresasyncioaiohttp
反爬虫应对措施随机请求头、延迟请求、使用代理IP等fake_useragenttime.sleep()
三、具体知识点详解和实现步骤
1. HTTP请求和HTML解析

通过 RequestsBeautifulSoup 库发送请求并解析内容。

import requests
from bs4 import BeautifulSoup# 获取页面内容
url = "https://example.com"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
response = requests.get(url, headers=headers)# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('title').text  # 提取页面标题
print("页面标题:", title)
2. 正则表达式提取数据

使用正则表达式从HTML或文本中提取数据,适用于格式固定的数据。

import rehtml = "<div><p>价格: ¥100</p></div>"
price = re.findall(r"¥(\d+)", html)
print("价格:", price[0])
3. 动态内容爬取

处理JavaScript加载的内容,可以使用Selenium模拟浏览器行为。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time# 设置Selenium驱动
service = Service("chromedriver_path")  # 替换为Chromedriver路径
driver = webdriver.Chrome(service=service)
driver.get("https://example.com")# 等待页面加载
time.sleep(3)
content = driver.find_element(By.CLASS_NAME, "target-class").text  # 获取内容
print("页面内容:", content)# 关闭浏览器
driver.quit()
4. 数据存储

爬取的数据可以存储为CSV、JSON文件,或保存到数据库中。

  • 存储为CSV文件
import pandas as pddata = [{"Title": "Example", "Price": "100"}]
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)
  • 存储为JSON文件
import jsondata = [{"Title": "Example", "Price": "100"}]
with open("output.json", "w") as f:json.dump(data, f)
  • 存储到SQLite数据库
import sqlite3connection = sqlite3.connect('example.db')
cursor = connection.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS Products (Title TEXT, Price TEXT)''')
cursor.execute("INSERT INTO Products VALUES (?, ?)", ("Example", "100"))
connection.commit()
connection.close()
5. 反爬虫应对措施

常见反爬虫措施及对应的应对方案。

反爬虫措施应对方法
IP封禁使用代理IP池,定期更换IP
User-Agent检测随机切换User-Agent,使用fake_useragent
访问频率限制设置请求延迟,使用time.sleep()控制速度
验证码手动输入验证码或使用OCR识别工具
JavaScript检测使用Selenium模拟浏览器,执行JavaScript代码
四、完整案例:爬取京东商品信息

通过以下案例将知识点进行综合运用,爬取京东指定商品的价格、名称及评价数。

1. 导入库和设置基本信息
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time# 基础设置
url = "https://search.jd.com/Search?keyword=python书籍&enc=utf-8"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
2. 获取网页内容
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
3. 解析数据
products = []
for item in soup.select(".gl-item"):title = item.select_one(".p-name em").text.strip()price = item.select_one(".p-price i").text.strip()comment = item.select_one(".p-commit a").text.strip()products.append({"Title": title, "Price": price, "Comment": comment})
4. 保存数据到CSV
df = pd.DataFrame(products)
df.to_csv("jd_products.csv", index=False, encoding='utf-8')
print("数据已保存到jd_products.csv")
5. 结果展示

结果文件jd_products.csv将包含商品标题、价格和评论数等信息。

示例数据结构(CSV文件)
TitlePriceComment
Python编程从入门到实践55.85000+
深入理解Python编程75.23000+

五、常见学习资源

  • Python网络爬虫:官方文档
  • BeautifulSoup使用指南:官方文档
  • Selenium浏览器自动化:官方文档
  • Scrapy爬虫框架:Scrapy

相关文章:

python爬虫指南——初学者避坑篇

目录 Python爬虫初学者学习指南一、学习方向二、Python爬虫知识点总结三、具体知识点详解和实现步骤1. HTTP请求和HTML解析2. 正则表达式提取数据3. 动态内容爬取4. 数据存储5. 反爬虫应对措施 四、完整案例&#xff1a;爬取京东商品信息1. 导入库和设置基本信息2. 获取网页内容…...

Vivado+Vscode联合打造verilog环境

一、Vivado下载安装 详细参考我另一篇文章&#xff1a; Vivado2022.2下载安装_fpga vivado下载-CSDN博客https://blog.csdn.net/weixin_61081689/article/details/143460790?spm1001.2014.3001.5501 二、Vscode下载安装 详细参考我另一篇文章&#xff1a; VscodeAnacond…...

Python 微服务架构

Python 微服务架构 目录 &#x1f6e0; 微服务架构的基本概念与设计原则⚡ Python 在微服务中的应用&#xff08;Flask、FastAPI等框架&#xff09;&#x1f680; 微服务的自动化部署与运维&#x1f50d; 服务发现与负载均衡&#x1f4ca; 微服务中的日志集中管理与监控&…...

Android JNI 技术入门指南

引言 在Android开发中&#xff0c;Java是一种主要的编程语言&#xff0c;然而&#xff0c;对于一些性能要求较高的场景&#xff08;如音视频处理、图像处理、计算密集型任务等&#xff09;&#xff0c;我们可能需要使用到C或C等语言来编写底层的高效代码。为了实现Java代码与C…...

实在智能受邀出席柳州市智能终端及机器人产业发展合作大会

10 月 27 日至 28 日&#xff0c;由中共柳州市委员会与柳州市人民政府主办的2024柳州市智能终端及机器人产业发展合作大会在柳州莲花山庄隆重举行。大会充分整合各方资源&#xff0c;持续深化与柳州在重大战略规划、重大平台建设、重点产业培育等领域的合作。作为智能体行业的知…...

算法求解(C#)-- 寻找包含目标字符串的最短子串算法

1. 引言 在字符串处理中&#xff0c;我们经常需要从一个较长的字符串中找到包含特定目标字符串的最短子串。这个问题在文本搜索、基因序列分析等领域有着广泛的应用。本文将介绍一种高效的算法来解决这个问题。 2. 问题描述 给定一个源字符串 source 和一个目标字符串 targe…...

AscendC从入门到精通系列(二)基于Kernel直调开发AscendC算子

本次主要讨论下AscendC算子的开发流程&#xff0c;基于Kernel直调工程的算子开发。 1 AscendC算子开发的基本流程 使用Ascend C完成Add算子核函数开发&#xff1b; 使用ICPU_RUN_KF CPU调测宏完成算子核函数CPU侧运行验证&#xff1b; 使用<<<>>>内核调用符…...

DAO模式的理解

目录 DAO模式 含义 DAO模式 的理解 分层思维 分层含义 分层目的 dao层 dao包&#xff08;对接的是操作数据库的接口&#xff09; dao包下lmpl 包&#xff08;dao包中接口的实现类&#xff09; 补充 1 你创建的实体类需要和数据库中建的表一一对应。 总结 DAO模式 含义…...

使用GitHub Actions实现CI/CD流程

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用GitHub Actions实现CI/CD流程 GitHub Actions 简介 创建仓库 配置工作流 示例工作流文件 触发和运行工作流 部署应用 最佳实…...

机器人助力Bridge Champ游戏:1.4.2版本如何提升玩家体验

在Bridge Champ游戏中&#xff0c;机器人扮演着桥牌游戏的“无名英雄”角色&#xff0c;默默地提升玩家体验。凭借智能化的设计&#xff0c;这些机器人不仅能够陪练&#xff0c;也大大提升了比赛的流畅度与趣味性。 Bridge Champ是什么 Bridge Champ是一个基于Ignis公链的在线…...

滑动窗口(单调队列维护窗口)-acwing

题目&#xff1a; 154. 滑动窗口 - AcWing题库 代码&#xff08;删除队列窗口多余的>单调队列&#xff09; 判断最值是否滑出窗口可以放在 入队的后面。 但是&#xff0c;判断&#xff0c;准备入队元素比前面小&#xff0c;要从队尾出队&#xff0c;放在入队前。 总之&a…...

ALB搭建

ALB: 多级分发、消除单点故障提升应用系统的可用性&#xff08;健康检查&#xff09;。 海量微服务间的高效API通信。 自带DDoS防护&#xff0c;集成Web应用防火墙 配置&#xff1a; 1.创建ECS实例 2.搭建应用 此处安装的LNMP 3.创建应用型负载均衡ALB实例 需要创建服务关联角…...

c# 动态lambda实现二级过滤(支持多种参数类型和模糊查询)

效果 调用方法 实体类&#xff08;可以根据需求更换&#xff09; public class ToolStr50 {public bool isSelected { get; set; }public string toolStr1 { get; set; }public string toolStr2 { get; set; }public string toolStr3 { get; set; }public string toolStr4 { …...

第J5周:DenseNet+SE-Net实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 任务&#xff1a; ●1. 在DenseNet系列算法中插入SE-Net通道注意力机制&#xff0c;并完成猴痘病识别 ●2. 改进思路是否可以迁移到其他地方呢 ●3. 测试集acc…...

Intern大模型训练营(五):书生大模型全链路开源体系笔记

观看视频&#xff0c;可以比较详细地了解到书生大模型全链路开源体系。 其中有几个印象比较深的点&#xff1a; 这张图讲述了书生浦语大模型开源的发展史&#xff0c;同时与主流的llama和Chatgpt模型进行比较&#xff0c;可以看出在参数上&#xff0c;InterLM在努力追赶甚至超…...

聚观早报 | 比亚迪腾势D9登陆泰国;苹果 iOS 18.2 将发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 11月5日消息 比亚迪腾势D9登陆泰国 苹果 iOS 18.2 将发布 真我GT7 Pro防尘防水细节 小米15 Ultra最快明年登场 …...

微信小程序开发,诗词鉴赏app,诗词搜索实现(三)

微信小程序开发&#xff0c;诗词鉴赏app&#xff08;一&#xff09;&#xff1a; https://blog.csdn.net/jky_yihuangxing/article/details/143501681微信小程序开发&#xff0c;诗词鉴赏app&#xff0c;诗词推荐实现&#xff08;二&#xff09;:https://blog.csdn.net/jky_yih…...

Kotlin 协程使用及其详解

Kotlin协程&#xff0c;好用&#xff0c;但是上限挺高的&#xff0c;我一直感觉自己就处于会用&#xff0c;知其然不知其所以然的地步。 做点小总结&#xff0c;比较浅显。后面自己再继续补充吧。 一、什么是协程&#xff1f; Kotlin 协程是一种轻量级的并发编程方式&#x…...

计算机组成原理--三章四章

这里写目录标题 第三章&#xff1a;存储系统3.1 存储系统基本概念引入存储器的层次结构简介产品 存储器的分类按层次分类按照介质分类按照存取方式分类按照信息的可更改性按照信息的可保护性 存储器的性能指标存储容量单位成本存储速度 总结 3.2主存储器的基本组成半导体元器件…...

单片机工程使用链接优化-flto找不到定义_链接静态库

IDE&#xff1a; CLion HOST&#xff1a; Windows 11 MinGW&#xff1a;x86_64-14.2.0-release-posix-seh-ucrt-rt_v12-rev0 GCC&#xff1a; arm-gnu-toolchain-13.3.rel1-mingw-w64-i686-arm-none-eabi 示例工程&#xff1a;https://github.com/ichliebedich-DaCapo/STM…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...