Python 网络爬虫原理与 Selenium 实战指南
本文讲解了 Python 网络爬虫的基本原理与工作流程,对比了常用工具与语言选择,重点阐述了 Selenium 库的安装与元素定位方法。通过豆瓣电影 Top250 抓取实战案例,展示了 URL 分析、DOM 解析及数据库存储的完整代码实现,并补充了关于频率控制、反爬策略及法律合规性的注意事项,旨在帮助读者建立规范的爬虫开发意识。

本文讲解了 Python 网络爬虫的基本原理与工作流程,对比了常用工具与语言选择,重点阐述了 Selenium 库的安装与元素定位方法。通过豆瓣电影 Top250 抓取实战案例,展示了 URL 分析、DOM 解析及数据库存储的完整代码实现,并补充了关于频率控制、反爬策略及法律合规性的注意事项,旨在帮助读者建立规范的爬虫开发意识。

网络爬虫(Web Crawler),又称网页蜘蛛或网络机器人,是一种按照既定规则自动抓取万维网信息的程序或脚本。在大数据时代,数据源是分析的基础。当无法购买数据时,从公开网站抓取成为常见手段。
业内主要分为爬虫与反爬虫两类。爬虫负责获取数据,反爬虫则致力于保护网站资源不被滥用。两者在技术层面不断博弈。
爬虫的工作流程通常包含三个核心步骤:
提升效率离不开合适的工具,推荐以下组合:
Java、Node.js、C#、Python 等均可实现爬虫。Python 因其语法简洁、生态丰富(如 Requests, BeautifulSoup, Scrapy)而成为首选。
使用 Python 进行爬虫开发,需掌握 Python 基础及 HTML、CSS、JavaScript 知识。相关库包括:
本文重点介绍 Selenium,它适用于处理动态加载内容的场景。
Selenium 是一个用于 Web 应用程序测试的工具,支持 Chrome、Firefox、Safari 等主流浏览器,也支持无头模式(Headless)。
pip install selenium
Selenium 提供多种定位方式,包括 ID、Name、Class Name、Tag Name、Link Text、Partial Link Text、XPath、CSS Selector。其中 XPath 和 CSS Selector 最为灵活。
目标网站:https://movie.douban.com/top250
每页显示 25 条记录,共 250 条。URL 分页规律为 start 参数递增 25。
使用 SQL Server 存储数据,表结构如下:
CREATE TABLE Movies (
Id INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(20) NOT NULL DEFAULT '',
EName NVARCHAR(50) NOT NULL DEFAULT '',
OtherName NVARCHAR(50) NOT NULL DEFAULT '',
Info NVARCHAR(600) NOT NULL DEFAULT '',
Score NVARCHAR(5) NOT NULL DEFAULT '0',
Number NVARCHAR(20) NOT NULL DEFAULT '0',
Remark NVARCHAR(200) NOT NULL DEFAULT ''
);
注意:实际生产中请勿硬编码敏感信息,并遵守网站的 robots.txt 协议。
import random
import time
import pymssql
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
def main():
# 配置 Chrome 无头模式
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
# 模拟请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
# 连接数据库 (请根据实际情况修改配置)
conn = pymssql.connect(host="localhost", user="sa", password="your_password", database="MySchool", charset="utf8")
cur = conn.cursor()
try:
for n in range(10):
count = n * 25
url = f'https://movie.douban.com/top250?start={count}'
driver.get(url)
time.sleep(2) # 等待页面加载
items = driver.find_elements(By.XPATH, "//ol/li")
for i, item in enumerate(items):
try:
name = item.find_element(By.XPATH, ".//div/div/div/a/span").text
ename = item.find_element(By.XPATH, ".//div/div/div/a/h3[@class='']").text.replace("/", "").replace(" ", "")
score = item.find_element(By.XPATH, ".//div/div/div/div/span[2]").text
sql = f"INSERT INTO Movies(Name, EName, Score) VALUES('{name}', '{ename}', '{score}')"
cur.execute(sql)
conn.commit()
print(f"第{n+1}页,第{i+1}条成功")
except Exception as e:
print(f"解析失败:{e}")
time.sleep(1) # 控制频率,避免被封禁
finally:
driver.quit()
conn.close()
if __name__ == '__main__':
main()
本文介绍了 Python 爬虫的基本原理,并通过 Selenium 实现了豆瓣电影数据的抓取。在实际应用中,建议结合 Scrapy 框架提高并发能力,同时始终将合规性放在首位。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online