Python爬虫入门:从HTTP请求到数据存储的完整指南

Python爬虫入门:从HTTP请求到数据存储的完整指南
1. 爬虫入门基础概念第一次接触爬虫技术时最困惑的就是它到底是什么。简单来说爬虫就是模拟人类浏览网页行为的自动化程序。就像你用浏览器打开淘宝查看商品价格一样爬虫能够自动完成这个操作并把需要的数据提取出来。为什么需要爬虫举个例子如果你要收集某电商平台1000款手机的价格做比价分析手动操作可能需要整整一天。而用爬虫程序可能几分钟就能搞定。我在做第一个爬虫项目时需要收集全国300个城市的天气数据手动操作根本不可能完成这就是爬虫的价值所在。2. HTTP请求基础爬虫工作的核心就是发送HTTP请求。就像在浏览器地址栏输入网址后按回车一样爬虫也需要发送这样的请求。Python中最常用的请求库是requests它比内置的urllib更简单易用。import requests response requests.get(http://example.com) print(response.text) # 获取网页HTML内容这里有个新手常犯的错误忘记检查请求状态。正确的做法应该是if response.status_code 200: print(请求成功) # 处理网页内容 else: print(请求失败, response.status_code)3. 网页解析技术获取网页内容后下一步是从HTML中提取需要的数据。常用的解析方式有三种正则表达式适合简单结构的文本提取BeautifulSoup适合复杂的HTML解析lxml性能最好的解析库以BeautifulSoup为例from bs4 import BeautifulSoup soup BeautifulSoup(response.text, html.parser) titles soup.find_all(h2, class_title) # 获取所有h2标题实际项目中我建议先用浏览器开发者工具(F12)分析目标数据的HTML结构再编写对应的提取代码。这样能避免很多不必要的调试时间。4. 数据存储方案提取到的数据通常需要保存起来。根据数据量和用途可以选择不同的存储方式小量数据CSV或JSON文件结构化数据SQLite或MySQL非结构化数据MongoDBimport csv with open(data.csv, w, newline) as f: writer csv.writer(f) writer.writerow([标题, 价格]) # 写入表头 for item in items: writer.writerow([item.title, item.price])5. 反爬虫应对策略现代网站都有各种反爬虫机制新手常会遇到请求被封禁的情况。常见对策包括设置请求头模拟浏览器访问headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } response requests.get(url, headersheaders)使用代理IP轮换proxies {http: http://10.10.1.10:3128} response requests.get(url, proxiesproxies)控制请求频率import time time.sleep(1) # 每次请求间隔1秒6. 遵守Robots协议在编写爬虫时必须尊重网站的Robots.txt协议。这个文件通常放在网站根目录下例如https://www.taobao.com/robots.txt。它会声明哪些页面允许爬取哪些禁止爬取。合法的爬虫应该先检查robots.txt设置合理的爬取间隔不爬取敏感或个人数据不对服务器造成过大压力7. 第一个完整爬虫示例下面是一个完整的天气数据爬取示例import requests from bs4 import BeautifulSoup import csv import time def get_weather(city): url fhttp://www.weather.com.cn/weather/{city}.shtml headers {User-Agent: Mozilla/5.0} response requests.get(url, headersheaders) if response.status_code 200: soup BeautifulSoup(response.text, html.parser) weather soup.find(ul, class_t clearfix) return [li.text.strip() for li in weather.find_all(li)] return [] cities [101010100, 101020100] # 北京,上海 with open(weather.csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([城市, 日期, 天气, 温度]) for city in cities: data get_weather(city) for item in data: writer.writerow([city, *item.split()]) time.sleep(2) # 礼貌爬取8. 常见问题排查新手常遇到的几个问题获取不到数据检查元素选择器是否正确网页是否动态加载被封IP添加请求头使用代理降低请求频率编码问题确保使用正确的字符编码如utf-8SSL证书错误添加verifyFalse参数(仅限测试环境)9. 爬虫进阶方向掌握基础后可以学习以下进阶内容Scrapy框架专业的爬虫框架Selenium处理动态网页分布式爬虫提高爬取效率验证码识别应对复杂反爬数据清洗提高数据质量10. 爬虫伦理与法律最后要强调的是爬虫技术是把双刃剑。务必注意不爬取敏感数据遵守网站的使用条款控制爬取频率尊重数据版权不用于非法用途我在实际项目中发现保持良好爬虫道德的项目往往能长期稳定运行而那些过度爬取的很快就会遇到各种限制。