通过前几次课,我们学习了爬虫的相关基础知识。
以下是我对爬虫学习做的一些总结:
一、认识爬虫:开启数据抓取之旅
1.1 什么是网络爬虫
网络爬虫就像是一个不知疲倦的 “数据搬运工”,它能按照预先设定的规则,自动在互联网上抓取各类信息。比如搜索引擎的爬虫会抓取网页内容,为用户搜索提供数据支持;电商数据爬虫可以抓取商品价格、评论等信息。它通过向网页服务器发送请求,获取 HTML、JSON 等格式的数据,再解析提取出有用信息。
1.2 爬虫的分类
二、搭建学习环境:为爬虫运行做好准备
2.1 选择编程语言
Python 是爬虫学习的热门选择,因其简洁的语法和丰富的第三方库。学习爬虫之前我们需要安装 Python 环境,可从 Python 官方网站(Download Python | Python.org)下载对应系统的安装包,安装时记得勾选 “Add Python to PATH”。
2.2 安装必要的库
import requests
response = requests.get('https://www.example.com')
print(response.text)
from bs4 import BeautifulSoup
import requests
response = requests.get('https://www.example.com')
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.text)
from lxml import etree
import requests
response = requests.get('https://www.example.com')
html = etree.HTML(response.text)
data = html.xpath('//div[@class="content"]/text()')
print(data)
三、爬虫核心技术学习:掌握数据抓取关键
3.1 HTTP 协议基础
HTTP 协议是爬虫与网页服务器沟通的 “语言”。要熟悉常见的请求方法,如 GET(获取资源)、POST(提交数据);了解请求头中的 User-Agent(标识客户端信息)、Cookie(维持会话状态)等字段的作用。比如,为了伪装成浏览器发送请求,可以这样设置请求头:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get('https://www.example.com', headers=headers)
3.2 数据解析技术
import re
import requests
response = requests.get('https://www.example.com')
links = re.findall(r'href="(.*?)"', response.text)
print(links)
from lxml import etree
import requests
response = requests.get('https://www.example.com')
html = etree.HTML(response.text)
paragraphs = html.xpath('//p/text()')
print(paragraphs)
from bs4 import BeautifulSoup
import requests
response = requests.get('https://www.example.com')
soup = BeautifulSoup(response.text, 'html.parser')
data = soup.select('div.article')
for item in data:
print(item.text)
四、爬虫实战:从理论到实践
4.1 简单静态网页抓取
以抓取一个小说网站的小说章节标题为例:
import requests
from bs4 import BeautifulSoup
url = 'https://www.example-novel.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
titles = soup.select('.chapter-title')
for title in titles:
print(title.text.strip())
4.2 动态网页抓取
对于使用 JavaScript 动态加载数据的网页,可借助Selenium库和浏览器驱动(如 ChromeDriver)。比如抓取一个动态加载图片的网页:
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = 'https://www.example-image.com'
driver.get(url)
time.sleep(3) # 等待页面加载
images = driver.find_elements_by_css_selector('img')
for img in images:
print(img.get_attribute('src'))
driver.quit()
五、应对挑战:解决爬虫常见问题
5.1 反爬处理
5.2 数据存储
将抓取的数据存储到文件或数据库:
import csv
data = [['标题1', '内容1'], ['标题2', '内容2']]
with open('data.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(data)
存储到 MySQL 数据库:先安装mysql-connector-python库(pip install mysql-connector-python),再连接数据库并插入数据:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
mycursor = mydb.cursor()
sql = "INSERT INTO yourtable (title, content) VALUES (%s, %s)"
val = [('标题1', '内容1'), ('标题2', '内容2')]
mycursor.executemany(sql, val)
mydb.commit()
mycursor.close()
mydb.close()