豆瓣Top250爬虫项目(requests版)是一个经典的Python爬虫实践案例,通过requests库获取网页数据,结合正则表达式提取结构化信息并保存为CSV文件。以下是项目核心解析:
1. 项目流程- 获取数据:使用requests发送HTTP请求,获取豆瓣Top250页面HTML内容。
- 解析数据:通过正则表达式匹配电影名称、年份等关键字段。
- 存储数据:将提取的数据写入CSV文件,便于后续分析。
2. 代码详解2.1 请求网页import requestsurl = 'https://movie.douban.com/top250'headers
= {"user-agent": "Mozilla/5.0..."} # 模拟浏览器访问resp = requests.get(url, headers=headers)page_content = resp.text # 获取HTML文本2.2 正则表达式匹配import reobj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)' r'</span>.*?<p class="">.*?<br>(?P<year>.*?) ', re.S)result = obj.finditer(page_content)2.3 数据存储import csvf = open("data1.csv", mode='w')csvwriter = csv.writer(f)for it in result: dic = it.groupdict() dic['year'] = dic['year'].strip() # 清理年份数据 csvwriter.writerow(dic.values())f.close()3. 正则表达式扩展若需提取更多字段(如评分、评价人数),可调整正则表达式:
obj = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>.*?' r'<span class="rating_num" property="v:average">(?P<rating>.*?)</span>.*?' r'<span>(?P<votes>.*?)人评价</span>', re.S)- 新增字段:
rating:匹配评分(如9.7)。
votes:匹配评价人数(如2800000)。
4. 注意事项5. 完整代码示例import requestsimport reimport csvimport timeurl = 'https://movie.douban.com/top250'headers
= {"user-agent": "Mozilla/5.0..."}resp = requests.get(url, headers=headers)page_content = resp.textobj = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>.*?' r'<span class="rating_num" property="v:average">(?P<rating>.*?)</span>.*?' r'<span>(?P<votes>.*?)人评价</span>.*?' r'<p class="">.*?<br>(?P<year>.*?) ', re.S)with open("douban_top250.csv", 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['名称', '评分', '评价人数', '年份']) # 写入表头 for it in obj.finditer(page_content): dic = it.groupdict() dic['year'] = dic['year'].strip() writer.writerow(dic.values()) time.sleep(2) # 礼貌性延迟6. 总结通过本项目,可掌握requests基础用法、正则表达式实战及数据存储流程,为更复杂的爬虫项目奠定基础。