引言
随着互联网的发展,爬虫技术已经成为了一种重要的数据收集手段。本文将介绍如何使用Python编写一个简单的爬虫脚本,用于抓取豆瓣电影Top250排行榜的数据,并将这些数据保存为CSV文件。
准备工作
首先,我们需要安装必要的Python库。本项目依赖于requests
、fake_useragent
以及pandas
库。如果你还没有安装这些库,可以通过pip命令安装:
pip install requests
pip install fake_useragent
pip install pandas
代码实现
1. 导入库
首先导入所需的库:
import requests
from fake_useragent import UserAgent
import re
import time
import pandas as pd
2. 定义请求头
为了避免被网站识别为爬虫,我们使用fake_useragent
库来随机设置User-Agent字段:
headers = {
"User-Agent": UserAgent().random
}
3. 初始化数据字典
我们将使用一个字典来存储抓取的数据:
data = {}
4. 定义获取数据的函数
定义一个函数get_data
来发送GET请求并解析返回的HTML内容,提取我们需要的信息:
def get_data(url):
"""
发送GET请求以获取网页内容,并提取感兴趣的数据。
"""
resp = requests.get(url, headers=headers, timeout=10)
if resp.status_code == 200:
content = resp.content.decode("utf-8")
pattern_packing = r'<em class="">(.*?)</em>'
pattern_imgUrl = r'<img width="100" alt=".*?" src="(.*?)" class="">'
pattern_moiver_cename = r'<a href=".*?" class="">.*?<span class="title">(.*?)</span>'
pattern_moiver_oname = r'<span class="other"> / (.*?)</span>'
packing = re.findall(pattern_packing, content)
imgUrl = re.findall(pattern_imgUrl, content)
moiver_cname = re.findall(pattern_moiver_cename, content, re.S)
moiver_oname = re.findall(pattern_moiver_oname, content)
data["排名"] = packing
data["图片链接"] = imgUrl
data["电影名称"] = moiver_cname
data["其他信息"] = moiver_oname
time.sleep(1)
else:
print("请求失败")
5. 定义保存数据的函数
定义一个函数save_data
来将数据保存到CSV文件中,并且合并现有数据和新数据,去重:
def save_data(data, filename='result2.csv'):
"""
将数据保存到CSV文件中,合并现有数据和新数据,并去重。
"""
df = pd.DataFrame(data)
if pd.io.common.file_exists(filename):
existing_df = pd.read_csv(filename)
combined_df = pd.concat([existing_df, df], ignore_index=True)
unique_df = combined_df.drop_duplicates(subset=['电影名称'], keep='first')
unique_df.to_csv(filename, index=False, encoding='utf-8-sig')
else:
df.to_csv(filename, index=False, encoding='utf-8-sig')
6. 主函数
最后,在if __name__ == '__main__':
块中定义我们的主函数:
if __name__ == '__main__':
for i in range(0, 250, 25):
url = f"https://movie.douban.com/top250?start={i}&filter="
print(f"开始采集数据第 {i/25+1} 页的数据...")
get_data(url)
save_data(data)
print("采集数据数据成功")
这段代码会遍历豆瓣电影Top250的每一页,并调用前面定义的函数来抓取数据和保存数据。
结语
通过以上步骤,我们已经完成了一个基本的Python爬虫脚本,它可以抓取豆瓣电影Top250排行榜上的数据,并将其保存为CSV文件。这只是一个简单的示例,实际应用中可能还需要考虑更多的情况,比如错误处理、更复杂的网页结构等。希望这篇博客能帮助你了解如何使用Python进行Web爬虫开发。