当前位置: 首页 > 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…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

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

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

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...