Python爬虫技术入门到精通:基础实践全解析
一、课程开篇:启程与准备
(一)课程简介
踏入 Python 爬虫领域,这门课程将带领我们从认识爬虫基础,到熟练运用工具采集、解析数据 。无论是想抓取网页信息做分析,还是探索网络数据价值,都能在这里找到路径,开启数据获取的自主之旅。
(二)环境搭建:用 VSCode 运行 Python 文件
要开展爬虫工作,先得搭好环境。VSCode 是便捷的代码编辑工具,搭配 Python 环境,就能开启编码。
- 安装 Python:前往 Python 官网,下载对应系统版本安装,记得勾选 “Add Python to PATH”,方便命令行调用 。
- 配置 VSCode:打开 VSCode,安装 “Python” 扩展。新建
.py文件,比如hello.py,写入 - 运行代码:点击右上角运行按钮,或用快捷键
Ctrl+F5(Windows)/Command+F5(Mac),在终端看到输出,就完成基础环境验证啦。 -
二、初遇网络爬虫:概念与工具初体验
(一)【案例】认识网络爬虫
网络爬虫,简单说就是自动抓取网页数据的程序。比如想获取某新闻网站的文章标题,手动复制效率低,爬虫就能模拟浏览器请求,快速提取。
-


基础原理:爬虫发送 HTTP 请求到网页服务器,服务器返回网页内容,爬虫再从内容里筛选需要的数据 。像这样一个简单示例(仅演示思路,实际需处理更多情况):import requests # 发送请求 response = requests.get('https://example.com/news') # 这里简单打印响应内容,后续会解析提取 print(response.text)(二)用八爪鱼、后羿采集器采集数据
不想写代码?可视化采集工具来帮忙。
- 八爪鱼采集器:打开工具,新建采集任务,输入目标网址(如某电商产品列表页 )。通过界面操作,设置要提取的字段(商品名称、价格等 ),它会自动模拟浏览、翻页,把数据整理成表格导出,适合快速采集结构化数据。
- 后羿采集器:类似流程,配置采集规则,定义字段提取方式(用 XPath、CSS 选择器 ),应对复杂页面也有办法,能帮我们轻松拿到数据,感受爬虫自动化魅力。
(三)网络爬虫反作弊体验
网站为防恶意爬虫,会设 “关卡”,我们得学习应对。比如频繁请求同一网站,可能触发 IP 封禁、验证码。
- IP 代理:借助代理 IP 池,改变请求来源 IP 。示例(结合
requests):import requests proxies = { "http": "http://123.45.67.89:8080", # 替换实际代理IP "https": "https://123.45.67.89:8080" } try: response = requests.get('https://target-site.com', proxies=proxies) print(response.text) except requests.exceptions.RequestException as e: print(f"请求出错:{e}") - 验证码处理:简单验证码可手动输入,复杂的可调用第三方识别服务(如打码平台 API ),不过要注意合规性,别用于恶意行为。
(四)警惕爬虫信息窃取风险
爬虫是把 “双刃剑”,合法采集要守规矩。网站的 robots.txt 文件(如 https://example.com/robots.txt )规定了可爬取范围,爬取前先查看,尊重网站权益,避免法律风险 。比如有些网站禁止爬取用户隐私页面,咱就得绕开。
三、深入请求响应:理解数据传输逻辑

浏览器加载网页过程

(一)探究请求 – 响应原理
浏览器访问网页,背后是 “请求 – 响应” 流程。用 requests 库模拟:
import requests
# 发送 GET 请求
response = requests.get('https://www.baidu.com')
print(f"状态码:{response.status_code}") # 查看响应状态,200 表示成功
print(f"响应头:{response.headers}") # 服务器返回的头信息
print(f"部分内容:{response.text[:100]}") # 网页内容片段
服务器根据请求的 URL、方法(GET/POST 等 ),返回对应资源,我们解析响应内容,就能拿到数据。
二)巧用浏览器开发者工具
浏览器开发者工具是爬虫调试 “神器”。打开 Chrome 或 Edge,按 F12 进入 “Network” 面板,刷新网页,能看到所有请求:
User - Agent(伪装浏览器身份 )、Cookie(带登录态 )等信息,让爬虫请求更像正常浏览。(三)用工具查网页真实响应
比如某股票网站,行情数据动态加载。在开发者工具找到数据接口 URL,用 requests 模拟请求:
import requests
# 发送 GET 请求
response = requests.get('https://www.baidu.com')
print(f"状态码:{response.status_code}") # 查看响应状态,200 表示成功
print(f"响应头:{response.headers}") # 服务器返回的头信息
print(f"部分内容:{response.text[:100]}") # 网页内容片段
服务器根据请求的 URL、方法(GET/POST 等 ),返回对应资源,我们解析响应内容,就能拿到数据。
(二)巧用浏览器开发者工具
浏览器开发者工具是爬虫调试 “神器”。打开 Chrome 或 Edge,按 F12 进入 “Network” 面板,刷新网页,能看到所有请求:
User - Agent(伪装浏览器身份 )、Cookie(带登录态 )等信息,让爬虫请求更像正常浏览。(三)用工具查网页真实响应
比如某股票网站,行情数据动态加载。在开发者工具找到数据接口 URL,用 requests 模拟请求:
import requests
url = 'https://stock-site.com/api/market-data'
headers = {
'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
data = response.json() # 假设返回 JSON 数据
print(data)
对比浏览器显示和代码获取的响应,验证数据采集是否正确。
(四)分析数据接口的请求响应
选一个喜欢的网站(如天气、新闻 API ),用开发者工具抓包,分析接口的请求参数(比如查询城市天气,参数有城市名、时间 )、响应结构(包含哪些数据字段 ),整理成文档,加深对接口交互的理解
四、抓取动态网页数据:突破静态限制
(一)获取静态网页数据(BeautifulSoup 实践 )

静态网页数据嵌入 HTML 结构,用 BeautifulSoup 解析。比如爬取博客文章标题:
import requests
from bs4 import BeautifulSoup
url = 'https://blog-example.com/post'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('h1', class_='post - title').text
print(f"文章标题:{title}")
通过标签名、类名定位元素,提取文本或属性,就能拿到静态页面里的数据。
(二)提取页面部分数据


拓展下,提取页面图片链接:
import requests
from bs4 import BeautifulSoup
url = 'https://example.com/gallery'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
img_urls = [img['src'] for img in soup.find_all('img', class_='gallery - img')]
for img in img_urls:
print(f"图片链接:{img}")
遍历 img 标签,获取 src 属性,轻松拿到图片地址。
(三)输出数据到模板(简单演示 )
把采集的数据整理后,可输出到 HTML 模板展示(用简单字符串拼接示例 ):
import requests
from bs4 import BeautifulSoup
url = 'https://example.com/articles'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
titles = [h2.text for h2 in soup.find_all('h2', class_='article - title')]
# 简单拼接 HTML 内容
html_template = f"""
<!DOCTYPE html>
<html>
<head><title>采集文章标题</title></head>
<body>
{"<h3>" + title + "</h3>" for title in titles}
</body>
</html>
"""
with open('output.html', 'w', encoding='utf - 8') as f:
f.write(html_template)
打开 output.html,就能看到整理好的标题页面,后续也可结合 Jinja2 等模板引擎优化。
五、数据解析:从杂乱到有序

(一)正则表达式、XPath 等解析方法
import re
text = '联系我们:info@example.com 或 support@test.com'
emails = re.findall(r'\w+@\w+\.\w+', text)
for email in emails:
print(f"提取的邮箱:{email}")
lxml 库,定位 XML/HTML 元素,比如取百度搜索结果标题(需先安装 lxml:pip install lxml ):from lxml import etree
import requests
url = 'https://www.baidu.com/s?wd=python爬虫'
response = requests.get(url)
html = etree.HTML(response.text)
titles = html.xpath('//h3[@class="t"]/a/em/following - sibling::text() | //h3[@class="t"]/a/text()')
for title in titles:
print(f"搜索结果标题:{title.strip()}")
(二)正则表达式实战
用正则从网页源码提取电话号码:
import re
import requests
url = 'https://example - contact.com'
response = requests.get(url)
phone_nums = re.findall(r'1\d{10}|0\d{2,3}-\d{7,8}', response.text)
for num in phone_nums:
print(f"找到电话号码:{num}")
根据号码格式写正则规则,精准匹配提取。
(三)解析京东商品数据
尝试解析京东商品页的商品名、价格(注意京东页面动态加载,这里演示静态解析思路,实际可能需抓接口 ):
from bs4 import BeautifulSoup
import requests
url = 'https://item.jd.com/100012345678.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 假设价格在特定标签,实际需分析页面结构调整
price = soup.find('span', class_='price').text if soup.find('span', class_='price') else '未找到价格'
name = soup.find('div', class_='sku - name').text.strip()
print(f"商品名:{name},价格:{price}")
(四)爬取小红书数据(思路 )
分析小红书页面(或接口 ),用 requests 结合解析库,提取笔记标题、点赞数。要注意小红书的反爬机制,可能需要处理 cookie、Headers 伪装,甚至用 selenium 模拟浏览器(后续会学 ),一步步尝试突破,完成数据采集。
六、结合 Nearbygroup 拓展:地理数据采集(示例方向 )
(一)获取地点经纬度
调用地图 API(如高德地图 API ),输入地址查经纬度:
import requests
# 需先在高德开放平台申请 API Key
api_key = '你的高德API Key'
address = '北京市朝阳区某大厦'
url = f'https://restapi.amap.com/v3/geocode/geo?address={address}&key={api_key}'
response = requests.get(url)
data = response.json()
if data['status'] == '1':
location = data['geocodes'][0]['location']
print(f"{address} 的经纬度:{location}")
else:
print("查询失败")
(二)按区域统计数据
拿到经纬度后,可查询该区域内的 POI 数据(如餐馆 ):
import requests
api_key = '你的高德API Key'
location = '116.404,39.915' # 示例经纬度(北京某点)
radius = 1000 # 搜索半径,单位米
url = f'https://restapi.amap.com/v3/place/around?location={location}&radius={radius}&types=050000&key={api_key}'
response = requests.get(url)
data = response.json()
for poi in data['pois']:
print(f"附近 POI:{poi['name']},地址:{poi['address']}")
(三)爬取车主之家车型销量数据
分析车主之家网站的车型库页面,找到销量数据接口(或解析 HTML ),用 requests 采集指定车型当月销量、环比数据,可存到 Excel(用 pandas 库:pip install pandas ):
import requests
import pandas as pd
url = 'https://www.16888.com/api/car - sales' # 假设接口,需实际分析替换
response = requests.get(url)
data = response.json()
df = pd.DataFrame(data)
df.to_excel('car_sales.xlsx', index=False)
后续还能基于 Excel 数据做简单可视化分析。
七、应对动态渲染:Selenium 库的使用(思路 )
有些网页靠 JavaScript 动态渲染数据,requests 拿不到完整内容,这时用 Selenium 模拟浏览器操作。比如爬取需要登录后才能看到的动态数据:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome() # 需下载对应 Chrome 驱动
driver.get('https://example - login.com')
# 模拟登录(输入账号密码,点击登录,这里需替换实际元素定位)
username = driver.find_element(By.ID, 'username')
username.send_keys('your_username')
password = driver.find_element(By.ID, 'password')
password.send_keys('your_password')
login_btn = driver.find_element(By.CLASS_NAME, 'login - button')
login_btn.click()
time.sleep(3) # 等待页面加载
# 之后可操作页面,提取动态加载数据
data_element = driver.find_element(By.ID, 'dynamic - data')
print(data_element.text)
driver.quit()
(一)技术栈升级路线图
- 基础层:Python 语法、requests/BeautifulSoup 库
- 进阶层:Selenium 自动化、Scrapy 框架、异步编程
- 高阶层:分布式爬虫、数据清洗与机器学习结合
(二)避坑指南与最佳实践
- 控制爬取频率,避免 IP 封禁(建议间隔≥1 秒)
- 建立请求头池和代理 IP 池(免费代理推荐:西刺、快代理)
- 定期更新爬虫规则,应对网站结构变化
- 数据采集后及时脱敏处理,保护隐私
(三)推荐学习资源
- 官方文档:requests、BeautifulSoup、Scrapy 官方文档
- 实战项目:GitHub 上的 Awesome-Python-Crawler 项目
- 社区交流:Stack Overflow、SegmentFault 爬虫板块
- 进阶课程:Coursera 的 Web Scraping with Python 专项课程
(四)未来趋势与拓展方向
- AI 驱动:结合 NLP 自动提取关键信息
- 无头浏览器:Puppeteer 替代 Selenium 的轻量级方案
- 反爬对抗:机器学习识别验证码与行为分析
- 数据应用:从采集到商业智能决策支持系统
结语:用技术解锁数据价值
从最初的 "print ('Hello World')" 到构建复杂的分布式爬虫系统,这一路的成长不仅是技术的积累,更是思维的蜕变。爬虫技术赋予我们 "上帝视角",让互联网海量数据为我所用。但请始终铭记:技术是工具,伦理是边界,创新是灵魂。
在这个数据爆炸的时代,愿你我都能成为合格的数据探索者 —— 用代码搭建桥梁,让数据创造价值,在技术与人文的平衡中,书写属于自己的数字故事。好啦!今天分享到这里结束了,青山不改,绿水长流,我们明天见!
作者:陆英松
