Python 爬虫基础入门与实战详解
Python 爬虫技术通过编程自动获取网页信息。核心流程包括发送请求、解析网页和保存数据。常用库有 requests 用于请求,BeautifulSoup 用于解析 HTML。静态网页可直接爬取,动态网页需使用 Selenium 模拟浏览器操作,大规模任务推荐 Scrapy 框架。应对反爬机制可添加请求头伪装、设置访问延迟或使用代理 IP。数据保存支持 CSV 文件或 SQLite 数据库。掌握这些基础即可实现基本的数据抓取功能。

Python 爬虫技术通过编程自动获取网页信息。核心流程包括发送请求、解析网页和保存数据。常用库有 requests 用于请求,BeautifulSoup 用于解析 HTML。静态网页可直接爬取,动态网页需使用 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
解析常见 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