一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)

一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)

爬虫是指通过编程自动从网页上获取信息的技术.想象你平时打开网页,右键点击 “查看源代码”,那些你看到的HTML代码就是网页的结构,而爬虫就像一位帮你阅读这些网页内容的“机器人”.

本文将详细讲解如何从零开始编写一个Python爬虫,即使是完全没接触过编程的朋友也能理解.

这里插播一条粉丝福利,如果你正在学习Python或者有计划学习Python,想要突破自我,对未来十分迷茫的,可以点击这里获取最新的Python学习资料和学习路线规划(免费分享,记得关注)  

一、爬虫的基本流程

  1. 发送请求:爬虫向目标网页发送请求,获取网页内容.
  2. 解析网页:从返回的网页内容中提取你需要的信息.
  3. 保存数据:将提取到的信息保存到文件或数据库中,以便后续分析.

二、常用爬虫库

在Python中,有两个非常流行的库用于爬虫开发:

  • requests:用于发送网络请求,获取网页内容.
  • BeautifulSoup:用于解析网页内容,提取需要的数据.
1. 安装库

首先,你需要安装这两个库.在命令行中执行以下命令:

pip install requests beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple 

三、简单爬虫示例

接下来,我们会编写一个简单的爬虫,从一个网页上获取数据.

1. 获取网页内容

第一步是使用 requests 库来获取网页的内容.我们以获取百度首页为例.

import requests # 发送请求获取网页内容 url = 'https://www.baidu.com' response = requests.get(url) # 打印网页内容 print(response.text) 
解释:
  • requests.get(url) 用于向指定网址发送请求并获取网页内容.
  • response.text 返回网页的HTML代码.

运行后,你会看到大量的HTML代码,这就是百度首页的内容.

2. 解析网页内容

获取网页内容后,我们需要用 BeautifulSoup 库来解析HTML,提取我们需要的信息.接下来我们解析百度首页的标题.

from bs4 import BeautifulSoup # 解析网页内容 soup = BeautifulSoup(response.text, 'html.parser') # 获取标题 title = soup.title.text print('网页标题:', title) 
解释:
  • BeautifulSoup(response.text, 'html.parser') 用于解析HTML内容.
  • soup.title.text 返回网页的标题.

输出:

makefile 网页标题: 百度一下,你就知道 
3. 提取更多信息

让我们继续提取网页中的链接(<a>标签中的 href 属性).这非常有用,例如你想抓取某个网站上的所有文章链接.

# 获取所有的<a>标签 links = soup.find_all('a') # 打印所有链接 for link in links:     href = link.get('href')     print(href) 
解释:
  • soup.find_all('a') 用于获取网页中的所有链接.
  • link.get('href') 获取每个链接的 href 属性,也就是网址.

四、爬虫的分类

1. 简单爬虫(静态网页)

如果网页是静态的,所有的数据直接在HTML代码中呈现,这种网页最容易爬取.以上示例就是一个典型的静态网页爬虫.

2. 动态爬虫(处理JavaScript生成的内容)

有些网页的数据不是直接在HTML中,而是通过JavaScript动态生成的.这类网页需要更复杂的处理方式,通常我们会使用 Selenium 这样的库来模拟浏览器操作.

安装 Selenium:
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple 

Selenium 可以像真实的用户一样与网页交互,甚至可以点击按钮、滚动页面等.比如要爬取动态生成的数据,我们可以使用Selenium来加载网页.

示例:
from selenium import webdriver # 设置浏览器驱动路径 driver = webdriver.Chrome() # 打开网页 driver.get('https://www.example.com') # 获取网页标题 print(driver.title) # 关闭浏览器 driver.quit() 
3. 爬虫框架(Scrapy)

当你需要大规模爬取数据时,可以使用专门的爬虫框架——Scrapy.Scrapy 是一个强大的爬虫框架,具有异步、高效的特点,适合用于构建复杂的爬虫.

安装 Scrapy:
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple 

五、爬虫常见问题及解决方案

1. 网页反爬机制

有些网站不允许爬虫访问,通常会通过检测请求头或IP地址来防止爬虫访问.为了绕过这种限制,我们可以伪装成正常用户.

解决方法:添加请求头
headers = {     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } response = requests.get(url, headers=headers) 
2. 延迟访问

频繁访问某个网站可能会触发反爬机制,我们可以通过设置延迟避免这种问题.

import time # 延迟2秒后发送下一个请求 time.sleep(2) 
3. 代理IP

如果网站通过检测IP地址限制访问,我们可以使用代理IP.

proxies = {     'http': 'http://10.10.1.10:3128',     'https': 'https://10.10.1.10:1080', } response = requests.get(url, proxies=proxies) 

六、保存数据

当我们提取到需要的信息后,通常需要将数据保存起来,常见的保存方式有保存到CSV文件数据库.

1. 保存到CSV文件
import csv # 保存数据到CSV文件 with open('data.csv', 'w', newline='', encoding='utf-8') as file:     writer = csv.writer(file)     writer.writerow(['标题', '链接'])  # 写入表头     for link in links:         writer.writerow([link.text, link.get('href')]) 
2. 保存到数据库

可以使用 SQLite 或其他数据库,将数据保存到数据库中.

import sqlite3 # 连接数据库(如果不存在会自动创建) conn = sqlite3.connect('data.db') cursor = conn.cursor() # 创建表 cursor.execute('CREATE TABLE IF NOT EXISTS links (title TEXT, href TEXT)') # 插入数据 for link in links:     cursor.execute('INSERT INTO links (title, href) VALUES (?, ?)', (link.text, link.get('href'))) # 提交事务并关闭连接 conn.commit() conn.close() 

七、总结

  1. 爬虫的基本流程:发送请求,解析网页,提取并保存数据.
  2. 常用库requests 用于发送请求,BeautifulSoup 用于解析HTML.
  3. 进阶技术:处理动态网页需要用到 Selenium,而大规模爬取可以使用 Scrapy 框架.
  4. 应对反爬:通过伪装请求头、设置延迟以及使用代理IP等方式绕过反爬机制.

最后,我精心筹备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步!

🌟 学习大礼包包含内容:

Python全领域学习路线图:一目了然,指引您从基础到进阶,再到专业领域的每一步学习路径,明确各方向的核心知识点。

超百节Python精品视频课程:涵盖Python编程的必备基础知识、高效爬虫技术、以及深入的数据分析技能,让您技能全面升级。

实战案例集锦:精选超过100个实战项目案例,从理论到实践,让您在解决实际问题的过程中,深化理解,提升编程能力。

华为独家Python漫画教程:创新学习方式,以轻松幽默的漫画形式,让您随时随地,利用碎片时间也能高效学习Python。

互联网企业Python面试真题集:精选历年知名互联网企业面试真题,助您提前备战,面试准备更充分,职场晋升更顺利。

👉 立即领取方式:只需【点击这里】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能

 

Read more

Yolo11环境配置win+Python+Anaconda--小白目标检测学习专用(超详细)

Yolo11环境配置win+Python+Anaconda--小白目标检测学习专用(超详细)

本文基于Anaconda和Pycharm已经安装 目录 一、下载Yolo11的源代码 二、部署环境 1.打开Anaconda软件 2.创建环境 3.运行环境 4.安装必要的包 注意:如果你下载包很慢 4.1安装Torch 4.1.1【GPU版本】 4.1.2【CPU版本】 4.2安装其他依赖包 三、运行项目 1.打开项目 2.更换解释器 3.验证运行 四、如何训练以及数据集配置 1.训练代码 2.数据集配置文件的创建 3.训练结果图的参数介绍 4.WiderPerson数据集(附加) 一、下载Yolo11的源代码  1.

By Ne0inhk
Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:突破高敏感数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私资产 在鸿蒙应用的高度依赖数据隐私(如隐藏数据库递增 ID、生成短网址或混淆用户主页链接)中,如何将枯燥的数字转换为非连续、看似随机且人类友好的标识符?hashids2 库提供了一套基于 Hashids 协议的工业级加密 ID 生成方案。本文将详解该库在 OpenHarmony 上的适配要点。 前言 什么是 hashids2?当你在 URL 中展示 user/123 时,攻击者很容易通过猜测 124 或 125 来爬取你的数据。hashids2 能够根据你设定的盐值(Salt)。将整数 123 转换为类似

By Ne0inhk

优选算法——位运算

👇作者其它专栏 《数据结构与算法》《算法》《C++起始之路》 1.前要知识 《位操作符的妙用》 2.相关题解 2.1判定字符是否唯一 算法思路: 利用【位图】的思想,每一个【比特位】代表一个【字符】,一个int类型的变量的32位足够表示所有的小写字母。比特位里若为0,表示这个字符没有出现过;若为1,表示该字符出现过。 可以用一个【整数】来充当【哈希表】。 class Solution { public: bool isUnique(string astr) { //利用鸽巢原理优化 if(astr.size()>26) return false; int bitmap=0; for(auto i:

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 collection 为鸿蒙端处理海量业务数据提供算法级的集合操作支持(数据处理瑞士军刀)

Flutter for OpenHarmony: Flutter 三方库 collection 为鸿蒙端处理海量业务数据提供算法级的集合操作支持(数据处理瑞士军刀)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 的复杂业务逻辑开发时,我们经常需要处理各种 Lists、Sets 和 Maps: 1. 数据分组:如何将成百上千条鸿蒙日志按日期自动归类(GroupBy)? 2. 集合对比:如何判断两个鸿蒙节点的状态列表是否内容一致(无视顺序)? 3. 优先级队列:如何在鸿蒙任务调度中自动让高优先级的任务插队排在第一位? collection 软件包是 Dart 官方团队维护的“集合增强包”。它补齐了原生态集合操作在算法层面的短板,为鸿蒙开发者提供了一套工业级、高性能的数据处理函数库。 一、高级数据处理模型 collection 在基础 List/Map 之上增加了丰富的算法维度。 鸿蒙原始迭代器 (Iterable) 分组与聚合 (GroupBy) 特殊数据结构 (Queue/Heap) 业务最终态 深层对比 (Equality)

By Ne0inhk