首页 > Python资料 博客日记
python—爬虫爬取电影页面实例
2024-08-06 01:00:05Python资料围观103次
下面是一个简单的爬虫实例,使用Python的requests库来发送HTTP请求,并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站,并提取每部电影的主义部分。
首先,确保你已经安装了requests和lxml库。如果没有安装,可以通过pip安装它们:
pip install lxml
安装好lxml库后,就可以在Python代码中通过from lxml import etree来导入etree模块,并使用它提供的各种功能。
然后,我们可以编写如下的爬虫脚本:
import re
import fake_useragent
import requests
from lxml import etree
if __name__ == '__main__':
# UA伪装
head = {
"User-Agent": fake_useragent.UserAgent().random
}
fp = open("./douban", "w", encoding="utf8")
# 1.url
for i in range(0,250,25):
url = "https://movie.douban.com/top250?start={i}&filter="
# 2.发送请求
response = requests.get(url, headers=head)
# 3.获取想要的数据
res_text = response.text
# 4.数据解析
tree = etree.HTML(res_text)
# 定位所有的li标签
li_list = tree.xpath("//ol[@class='grid_view']/li")
for li in li_list:
film_name = "".join(li.xpath(".//span[@class='title'][1]/text()"))
director_actor_y_country_type = "".join(li.xpath(".//div[@class='bd']/p[1]/text()"))
score = "".join(li.xpath(".//span[@class='rating_num']/text()"))
quote = "".join(li.xpath(".//span[@class='inq']/text()"))
new_str = director_actor_y_country_type.strip()
y = re.match(r"([\s\S]+?)(\d+)(.*?)", new_str).group(2)
country = new_str.rsplit("/")[-2].strip()
types = new_str.rsplit("/")[-1].strip()
director = re.match(r"导演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(1)
try:
actor = re.match(r"(.*?)主演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(2)
except Exception as e:
actor = "no"
fp.write(film_name + "#" + y + "#" + country + "#" + types + "#" + director + "#" + actor + "#" + score + "#" + quote + "\n")
print(film_name, score, quote, y, country, types, director)
fp.close()
这段代码是一个Python脚本,用于从豆瓣电影Top 250页面抓取电影信息,并将这些信息保存到本地文件中。下面是对代码的详细解释:
1.导入必要的库:
re: 用于正则表达式匹配。
fake_useragent: 用于生成随机的User-Agent,以模拟不同的浏览器访问,避免被网站识别为爬虫。
requests: 用于发送HTTP请求。
lxml.etree: 用于解析HTML文档,提取所需信息。
2.设置User-Agent:
使用fake_useragent.UserAgent().random生成一个随机的User-Agent,并存储在head字典中,作为HTTP请求头的一部分。
3.打开文件:
使用open(“./douban”, “w”, encoding=“utf8”)以写入模式打开(或创建)一个名为douban的文件,用于存储抓取的电影信息。
4.循环请求豆瓣电影Top 250页面:
通过循环,每次请求豆瓣电影Top 250页面的一个子集,start参数从0开始,每次增加25,直到250(但不包括250,因为range的结束值是开区间)。
5.发送HTTP请求:
使用requests.get(url, headers=head)发送GET请求,请求头中包含之前设置的User-Agent。
6.解析HTML文档:
使用etree.HTML(res_text)将响应的文本内容解析为HTML文档。
通过XPath表达式//ol[@class=‘grid_view’]/li定位所有包含电影信息的li标签。
7.提取电影信息:
遍历每个li标签,提取电影名称、导演/演员/年份/国家/类型、评分、简介等信息。
使用正则表达式处理director_actor_y_country_type字符串,以提取年份、国家和类型。
注意,这里对演员信息的提取使用了异常处理,如果正则表达式匹配失败(例如,某些电影信息中可能没有演员信息),则将演员设置为"no"。
8.写入文件:
将提取的电影信息拼接成字符串,并写入之前打开的文件中,每条信息占一行。
9.关闭文件:
循环结束后,关闭文件。
这里我们截取了部分输出结果的信息,可以看到已经成功爬取电影网站中的部分信息,这个简单的爬虫示例展示了如何发送HTTP请求、解析HTML内容以及提取所需信息的基本流程。
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程