Python 爬虫入门与实战指南
Python 爬虫通过编程自动获取网页信息。基本流程包括发送请求、解析网页和保存数据。常用库有 requests 用于请求、BeautifulSoup 用于解析静态页面。动态页面需使用 Selenium 模拟浏览器,大规模爬取可用 Scrapy 框架。应对反爬机制可添加请求头、设置延迟或使用代理 IP。数据可保存为 CSV 文件或存入数据库如 SQLite。涵盖从入门到进阶的爬虫技术与实战示例。

Python 爬虫通过编程自动获取网页信息。基本流程包括发送请求、解析网页和保存数据。常用库有 requests 用于请求、BeautifulSoup 用于解析静态页面。动态页面需使用 Selenium 模拟浏览器,大规模爬取可用 Scrapy 框架。应对反爬机制可添加请求头、设置延迟或使用代理 IP。数据可保存为 CSV 文件或存入数据库如 SQLite。涵盖从入门到进阶的爬虫技术与实战示例。

爬虫是指通过编程自动从网页上获取信息的技术。想象你平时打开网页,右键点击'查看源代码',那些你看到的 HTML 代码就是网页的结构,而爬虫就像一位帮你阅读这些网页内容的'机器人'。
本文将详细讲解如何从零开始编写一个 Python 爬虫,即使是完全没接触过编程的朋友也能理解。
在 Python 中,有两个非常流行的库用于爬虫开发:
首先,你需要安装这两个库。在命令行中执行以下命令:
pip install requests beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple
接下来,我们会编写一个简单的爬虫,从一个网页上获取数据。
第一步是使用 requests 库来获取网页的内容。我们以获取百度首页为例。
import requests
# 发送请求获取网页内容
url = 'https://www.baidu.com'
response = requests.get(url)
# 打印网页内容
print(response.text)
requests.get(url) 用于向指定网址发送请求并获取网页内容。response.text 返回网页的 HTML 代码。运行后,你会看到大量的 HTML 代码,这就是百度首页的内容。
获取网页内容后,我们需要用 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 返回网页的标题。输出:
网页标题:百度一下,你就知道
让我们继续提取网页中的链接(<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 属性,也就是网址。如果网页是静态的,所有的数据直接在 HTML 代码中呈现,这种网页最容易爬取。以上示例就是一个典型的静态网页爬虫。
有些网页的数据不是直接在 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()
当你需要大规模爬取数据时,可以使用专门的爬虫框架——Scrapy。Scrapy 是一个强大的爬虫框架,具有异步、高效的特点,适合用于构建复杂的爬虫。
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
有些网站不允许爬虫访问,通常会通过检测请求头或 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)
频繁访问某个网站可能会触发反爬机制,我们可以通过设置延迟避免这种问题。
import time
# 延迟 2 秒后发送下一个请求
time.sleep(2)
如果网站通过检测 IP 地址限制访问,我们可以使用代理 IP。
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'https://10.10.1.10:1080',
}
response = requests.get(url, proxies=proxies)
当我们提取到需要的信息后,通常需要将数据保存起来,常见的保存方式有保存到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')])
可以使用 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()
requests 用于发送请求,BeautifulSoup 用于解析 HTML。Selenium,而大规模爬取可以使用 Scrapy 框架。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online