Python网页爬虫爬取豆瓣Top250电影数据——XPath数据解析
在当今互联网时代,数据爬虫已成为学习和研究数据的重要工具。本文将介绍如何使用Python编写一个简单的网页爬虫,爬取豆瓣电影Top250的数据,并使用XPath解析数据。
环境准备
在开始之前,我们需要确保已经安装了相关的第三方库。可以使用以下命令安装 requests
和 lxml
:
pip install requests lxml
requests
用于发送网络请求。lxml
是一个高效的 XML 和 HTML 解析库,支持XPath查询。
爬虫代码示例
以下是使用Python爬取豆瓣电影Top250数据的示例代码:
import requests
from lxml import etree
# 定义爬取豆瓣Top250电影的函数
def fetch_douban_top250():
url = 'https://movie.douban.com/top250'
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'
}
# 发送HTTP请求
response = requests.get(url, headers=headers)
# 判断请求是否成功
if response.status_code == 200:
print("成功获取页面")
return response.text
else:
print("请求失败,状态码:", response.status_code)
return None
# 使用XPath解析数据
def parse_douban_top250(html):
# 创建HTML解析对象
tree = etree.HTML(html)
# 使用XPath解析电影数据
movies = tree.xpath('//ol[@class="grid_view"]/li')
movie_list = []
for movie in movies:
title = movie.xpath('.//span[@class="title"]/text()')[0] # 电影标题
rating = movie.xpath('.//span[@class="rating_num"]/text()')[0] # 电影评分
quote = movie.xpath('.//span[@class="inq"]/text()')
quote_text = quote[0] if quote else '' # 电影短评
movie_data = {
'title': title,
'rating': rating,
'quote': quote_text
}
movie_list.append(movie_data)
return movie_list
# 主函数
def main():
html = fetch_douban_top250()
if html:
movie_list = parse_douban_top250(html)
for index, movie in enumerate(movie_list, start=1):
print(f"{index}. {movie['title']} | 评分: {movie['rating']} | 短评: {movie['quote']}")
if __name__ == '__main__':
main()
代码解析
-
发送请求:在
fetch_douban_top250
函数中,我们使用requests.get
方法发送HTTP请求,目标是豆瓣Top250电影页面。为了防止被反爬虫机制封禁,我们添加了一个User-Agent头。 -
检查响应:在获取响应后,我们检查HTTP状态码是否为200,表示请求成功。
-
数据解析:在
parse_douban_top250
函数中,我们首先使用lxml.etree
将获取的HTML代码转化为可解析的文档对象。随后使用XPath选择器提取电影信息。例如,我们提取电影标题、评分以及短评。 -
输出结果:在主函数
main
中,我们调用上述两个函数,并将提取的电影信息以格式化的方式打印出来。
总结
通过以上介绍,我们实现了一个简单的爬虫,能够自动获取豆瓣Top250电影的标题、评分和短评。需要注意的是,在进行网页爬虫时,应遵循网站的爬虫协议(如robots.txt
),并尽量控制请求频率,以减少对目标网站的影响。使用XPath解析数据使得提取信息变得更加高效和灵活,是一种非常实用的方法。希望这篇文章对你学习Python爬虫和数据解析有所帮助!