| 包含排名、名称、营业收入等字段
关键点在于找到数据所在的HTML节点,这里我们可以使用XPath或CSS选择器定位。不过考虑到页面结构规整,正则表达式也是不错的选择。
3.2 反爬策略应对方案
财富中国500强网站的反爬措施相对温和,但我们仍需注意:
- User-Agent设置:模拟主流浏览器
- 请求频率控制:避免过快请求
- 异常处理:网络波动时的重试机制
实测表明,设置合理的请求头后,单次请求就能获取全部数据,不需要处理复杂的反爬机制。
4. 爬虫核心实现
4.1 网页请求模块
首先构建请求函数,关键点在于请求头的设置:
python复制import requests
def fetch_page(url):
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'
}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
return response.text
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
这个函数处理了网络请求的异常情况,设置了10秒超时,确保程序健壮性。
4.2 数据解析模块
解析环节我们使用正则表达式提取表格数据:
python复制import re
def parse_html(html):
pattern = re.compile(r'<tr>.*?<td.*?>(\d+)</td>.*?<td.*?><a.*?>(.*?)</a></td>.*?<td.*?>([\d,.]+)</td>.*?<td.*?>([\d,.]+)</td>', re.S)
items = re.findall(pattern, html)
return items
正则表达式说明:
(\d+) 匹配排名数字
(.*?) 非贪婪匹配公司名称
([\d,.]+) 匹配营业收入和利润数字
这种写法虽然不如BeautifulSoup直观,但性能更好,适合简单的表格数据提取。
4.3 数据存储模块
使用pandas将数据保存为Excel:
python复制import pandas as pd
def save_to_excel(data, filename):
df = pd.DataFrame(data, columns=['排名', '公司名称', '营业收入(百万)', '利润(百万)'])
df.to_excel(filename, index=False, engine='openpyxl')
pandas的DataFrame提供了强大的数据清洗能力,我们可以轻松地对提取的数据进行进一步处理,比如:
5. 完整代码实现
将各模块组合起来,形成完整爬虫:
python复制import requests
import re
import pandas as pd
def main():
url = "https://www.fortunechina.com/fortune500/c/2025-07/22/content_467056.htm"
print("开始获取网页内容...")
html = fetch_page(url)
if not html:
print("获取网页内容失败")
return
print("解析数据中...")
data = parse_html(html)
if not data:
print("解析数据失败")
return
print("保存到Excel...")
save_to_excel(data, "fortune500_2025.xlsx")
print("数据保存完成")
if __name__ == "__main__":
main()
6. 常见问题与优化建议
6.1 爬取失败排查指南
如果爬虫无法正常工作,可以按照以下步骤排查:
- 检查网络连接:尝试直接访问目标URL
- 验证反爬措施:更换User-Agent或添加Referer
- 检查页面结构:确认HTML是否发生变化
- 调试正则表达式:使用在线正则测试工具验证
6.2 性能优化方向
这个基础爬虫还可以进一步优化:
- 多线程/异步请求:如果需要爬取多页数据
- 数据增量更新:记录已爬取条目,避免重复
- 异常邮件通知:爬取失败时自动发送警报
- 日志记录:详细记录爬取过程
6.3 数据质量提升建议
原始数据可能需要进一步清洗:
- 统一货币单位:将"百万"转换为标准单位
- 处理缺失值:某些企业可能没有利润数据
- 公司名称标准化:去除特殊字符和空格
7. 爬虫伦理与法律考量
在开发和使用爬虫时,我们必须注意:
- 遵守robots.txt协议:检查目标网站的爬虫政策
- 控制请求频率:避免对服务器造成负担
- 尊重版权:合理使用爬取的数据
- 隐私保护:不爬取敏感个人信息
财富中国500强是公开数据,但商业使用时仍需注意数据版权问题。
8. 项目扩展思路
这个基础爬虫可以发展为更强大的工具:
- 定时自动爬取:设置每周/月自动更新数据
- 数据分析功能:添加趋势分析、行业对比
- 可视化展示:生成数据图表和报告
- 企业详情爬取:从链接进入获取更多信息
我在实际项目中扩展了行业分类功能,可以自动将500强企业按行业归类,为商业分析提供更多维度。
9. 爬虫开发经验分享
经过多年爬虫开发,我总结了以下几点经验:
- 优先使用API:如果网站提供官方API,尽量使用
- 模拟浏览器行为:对于复杂反爬网站,可以考虑Selenium
- 数据验证机制:检查爬取数据的完整性和准确性
- 代码模块化:便于维护和重用
在这个案例中,我们选择了最简单的技术方案,因为目标网站结构简单,反爬措施少。对于更复杂的网站,可能需要更高级的技术栈。
开发爬虫最耗时的往往不是编码,而是不断适应网站的变化。建议为重要爬虫项目编写监控脚本,及时发现页面结构变化。
内容推荐已经到底了哦 已经到底了哦
|