目录
一、基础学习
1、基础语法
# 示例:列表推导式快速处理数据
urls = [f"https://example.com/page/{i}" for i in range(1, 6)]
2、函数与模块
-
自定义函数、参数传递
-
导入标准库(如
os
,json
,csv
)
3、文件操作
-
读写文本文件(
.txt
/.csv
/.json
)
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('保存爬取的数据')
二、爬虫核心技术
1、 HTTP协议基础
-
理解URL结构、GET/POST请求
-
使用浏览器开发者工具(F12)分析网络请求
2、Requests库(核心工具)
-
发送请求、处理响应、设置请求头
import requests
headers = {'User-Agent': 'Mozilla/5.0'} # 模拟浏览器访问
response = requests.get('https://example.com', headers=headers)
print(response.text) # 获取HTML内容
3、HTML解析
BeautifulSoup(易上手):
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_text, 'html.parser')
titles = soup.find_all('h2', class_='title') # 提取所有标题
lxml(高性能):
from lxml import etree
tree = etree.HTML(html_text)
price = tree.xpath('//div[@class="price"]/text()') # XPath定位
4、数据存储
- CSV文件:
import csv
with open('data.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['标题', '价格'])
-
数据库(后期学习):
-
SQLite(内置)、MySQL、MongoDB
-
三、实战项目(逐步进阶)
1、新手友好项目
-
豆瓣电影TOP250(静态页面,结构清晰)
-
目标:提取电影名称、评分、短评
-
技术点:分页处理、CSS选择器
-
-
天气数据抓取(中国天气网)
-
目标:获取指定城市未来三天天气
-
2、中级挑战
- 动态加载数据(Ajax/JSON接口):
# 示例:抓取知乎热榜(需分析XHR请求)
api_url = "https://www.zhihu.com/api/v3/feed/topstory/hot-lists"
response = requests.get(api_url, headers=headers)
data = response.json() # 直接解析JSON
登录与Session保持(模拟表单提交):
session = requests.Session()
login_data = {'username': 'your_id', 'password': 'your_pw'}
session.post('https://example.com/login', data=login_data)
3、反爬应对策略
-
设置随机User-Agent(使用
fake_useragent
库) -
使用代理IP(免费资源如https://www.free-proxy-list.com/)
-
添加请求延迟(
time.sleep(2)
)
四、高级工具扩展
1、Selenium(处理JavaScript渲染)
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://dynamic-site.com")
dynamic_content = driver.find_element_by_class_name('content').text
2、Scrapy框架(大型项目必备)
-
创建爬虫项目、编写Spider
-
使用Item Pipeline处理数据
五、注意事项
-
法律与道德
-
遵守目标网站的
robots.txt
(如https://www.amazon.com/robots.txt) -
避免高频请求(合理设置
time.sleep
)
-
-
调试技巧
-
使用
print()
或日志模块逐步输出结果 -
异常处理:
-
try:
response = requests.get(url, timeout=5)
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")