利用xpath解析器爬取豆瓣电影top250

2023-11-11

首先声明需要用的库,当然我还用到了os库,将工作路径修改到了我指定的路径。os.chdir(r"C:\Users…")

from lxml import etree
import requests 
import time
import json

豆瓣top250总共有10页,每页25部电影,每页的url都是有规律的,第一页的url是“https://movie.douban.com/top250”,第二页的url是“https://movie.douban.com/top250?start=25&filter=”也就是start参数会随着页码变化,首页就是start=0,我们首先实现get_page()方法并传入参数url

def get_page(url):
	headers={"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}
	#请求头可以通过F12快捷键获得
	response=requests.get(url,headers=headers)
	response.encoding=response.apparent_encoding
	#由于网站的编码很多都不同,使用response.apparent_encoding获取网站的编码格式。
	return response.text

这样运行后就获得了首页的源代码了,接下来就是解析网页,提取信息。
我们使用Xpath来进行相应信息的抽取。

def get_message(text)
""":parse text 是页面返回的源代码

使用xpath提取我们需要的电影名字,排名,影评等信息"""
html=etree.xpath(text)
rank=html.xpath('//div[@class="pic"]/em/text()')
name=html.xpath('//div[@class="hd"]/a/span[1]/text()')
score=html.xpath('//div[@class="star"]/span[contains(@class,"rating_num")]/text()')
words=html.xpath('//p[@class="quote"]/span/text()')
for items in range(len(rank)):
	yield {"rank":rank[items],"name":name[items],
	"score":score[items],"words":words[items]}

这样就提取了电影名字、评分、排名、影评等内容。并赋值为一个字典,形成数据化结构。随后我们就要将提取的结果写入文件。由于字典形式无法直接写入txt,所以要用JSON库的dumps()方法。

def write_file(content):
	with open("result.txt","a",encoding="gb18030") as f:
		f.write(json.dumps(content,ensure_ascii=False)+'\n')

接下来就是构建网址,豆瓣top250总共有10页,每页25部电影,每页的url都是有规律的,第一页的url是“https://movie.douban.com/top250”,第二页的url是“https://movie.douban.com/top250?start=25&filter=”也就是start参数会随着页码变化,首页就是start=0。

def change_url(start):
	url="https://movie.douban.com/top250?start="+str(start)+"&filter="
	return url
def main(start):
	url=change_url(start)
	text=get_page(url)
	for i in get_message(text):
		print(i)
		write_file(i)
if __name__=="__main__":
	for i in range(10):
		start=25*10
		main(start)
		time.sleep(3) #防止反爬虫,如果速度过快可能会无响应,设置延时等待

全部代码,如下:

from lxml import etree
import requests 
import time
import json
def get_page(url):
	headers={"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}
	response=requests.get(url,headers=headers)
	response.encoding=response.apparent_encoding
	return response.text
def get_message(text):
	html=etree.xpath(text)
	rank=html.xpath('//div[@class="pic"]/em/text()')
	name=html.xpath('//div[@class="hd"]/a/span[1]/text()')
	score=html.xpath('//div[@class="star"]/span[contains(@class,"rating_num")]/text()')
	words=html.xpath('//p[@class="quote"]/span/text()')
	for items in range(len(rank)):
		yield {"rank":rank[items],"name":name[items],"score":score[items],"words":words[items]}
def write_file(content):
	with open("result.txt","a",encoding="gb18030") as f:
		f.write(json.dumps(content,ensure_ascii=False)+'\n')
def change_url(start):
	url="https://movie.douban.com/top250?start="+str(start)+"&filter="
	return url
def main(start):
	url=change_url(start)
	text=get_page(url)
	for i in get_message(text):
		print(i)
		write_file(i)
if __name__=="__main__":
	for i in range(10):
		start=25*10
		main(start)
		time.sleep(3) #防止反爬虫,如果速度过快可能会无响应,设置延时等待

目前发现问题就是如果某部电影没有影评就会出现影评错乱的现象导致列表长度无法匹配,求大神指教。个人博客,小白一个,勿喷。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用xpath解析器爬取豆瓣电影top250 的相关文章

随机推荐

  • Multisim14基本介绍(上)

    Multisim14是一种专门用于电路仿真和设计的软件之一 是NI公司下属的ElectroNIcs Workbench Group推出的以Windows为基础的仿真工具 是目前最为流行的EDA软件之一 该软件基于PC平台 采用图形操作界面虚
  • ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

    笔者在使用LogisticRegression模型进行预测时 报错 Traceback most recent call last File D 软件 学习 Python MachineLearing taitannike train py
  • Linux Docker容器 镜像的详解与创建

    一 什么是docker 镜像 就是把业务代码 可运行环境进行整体的打包 二 如何创建docker镜像 现在docker官方共有仓库里面有大量的镜像 所以最基础的镜像 我们可以在公有仓库直接拉取 因为这些镜像都是原厂维护 可以得到即使的更新和
  • 响应式原理

    vue响应式原理 vue2 vue2中使用了ES5里面的Object defineProperty方法 给对应data中的数据的每个值添加了set和get方法 当值被修改时 就会触发对应的set方法 set方法里会通知独影的watcher
  • Python循环结构——for

    for循环是循环结构中的另外一种 基本使用方法 for 变量名 in 目标对象 用于循环的子代码 在for循环中 必定存在一个变量作为游标 且变量会在每次循环开始时自动发生变化 如果没有特别设定变化的值 则默认为 1 当目标对象为列表 字典
  • redis学习:redisKey的基本命令

    Redis是一个开源 BSD许可 内存存储的数据结构服务器 可用作数据库 高速缓存和消息队列代理 它支持字符串 哈希表 列表 集合 有序集合 位图 hyperloglogs等数据类型 内置复制 Lua脚本 LRU收回 事务以及不同级别磁盘持
  • 激光雕刻机:废旧光驱的涅槃之路

    激光雕刻机 废旧光驱的涅槃之路 从 FeedzShare 1天最热 有超过 100 人喜欢此条目 来自 www guokr com FeedzShare 发布时间 2011年04月20日 已有 5 人推荐 DIYer zieak 制作时间
  • ROS 安装详细教程 —— Ubuntu20.04 LTS 安装

    ROS 安装详细教程 Ubuntu20 04 LTS 安装 ROS 简介 官方文档对 ROS 的介绍如下 The Robot Operating System ROS is a set of software libraries and t
  • 网站优化搜索引擎与关键词

    网站优化搜索引擎与关键词 人们不应该高估搜索引擎的智商 这不利于seo的研究 事实上 搜索引擎是非常愚蠢的 让我们举一个非常简单的例子 你在搜索引擎中输入 教师 这个词 搜索引擎就会给出一个准确的搜索列表 我们不会给出 教师 一词的检索信息
  • 使用Docker部署前后端分离项目

    目录 引言 部署需要用到的镜像汇总 1 Redis部署 1 搜索Redis镜像 2 拉取Redis镜像 3 创建Redis容器 2 MySQL部署 1 拉取MySQL镜像 2 查看镜像 3 启动MySQL容器 4 使用本地Navicat测试
  • 报错(内存溢出):Exception in thread "Thread-8" java.lang.OutOfMemoryError: PermGen space

    Exception in thread Thread 8 java lang OutOfMemoryError PermGen space 解决办法 能正常使用 但是偶尔会报下面这个错误 从偶尔这个说法来看 是你热部署次数太多了 导致JVM
  • http协议访问网址的流程

    http协议 http协议可以说是由三个部分组成的 超文本 URL Http 超文本 网页中的信息 如文字 图片 视频 URL 统一资源定位符 由三个部分组成 协议 主机端口 文件名及路径 使用http协议的访问流程 例如我们想访问百度 则
  • C# => Lambda表达式理解

    本文参考网上的博客和找到的资料加上个人理解编写的 主要的代码借鉴 http www cnblogs com knowledgesea p 3163725 html 百度百科 希望能够帮助理解lambda表达式 定义 Lambda表达式 是一
  • 阿里测开的性能测试技术笔记:如何快速上手压测工作

    新年第一个工作日 继续整理之前的技术笔记 前面通过三篇的内容 将自动化测试相关的技术笔记做了整理汇总 这篇内容 主要是我刚开始做性能测试时的一些记录 对新手或者刚进入一个新项目的同学 应该有所帮助 一般我们在刚介入一个项目时 我认为可以从如
  • 基于视觉重定位的室内AR导航APP的大创项目思路(3)手机相机内参数据获取和相机标定

    文章目录 相机内参 为什么要获取相机的内参数据 获取相机内存数据的方法 棋盘格标定 自动相机标定 前情提要 是第一次做项目的小白 文章内的资料介绍如有错误 请多包含 相机内参 相机内参是本身的物理数据 包括焦距f和缩放c 一般以矩阵K的形式
  • Lattice Diamond 3.12下载与安装(免费获取license.dat)

    Lattice Diamond 3 12下载 安装与激活 免费获取license dat Lattice Diamond是LATTICE半导体公司推出的一款免费的FPGA开发软件 其实这个软件具体的下载与安装过程在其配套文档里有比较详细的说
  • STM32Cube MX USB双设备MSC+CDC 实现虚拟U盘+虚拟串口

    前言 在上一篇文章实现USB虚拟U盘之后 项目需要用同一个USB口同时实现MSC和CDC功能 既能进行串口通信又能读取片外FLASH虚拟U盘 对于USB通用串行总线如果要真正搞明白这个协议还是比较困难的 需要用不少时间来了解驱动原代码 但是
  • IDA动态调试动态注册native函数流程

    安卓 手游逆向交流群963612891 IDA动态调试动态注册native函数流程1 编写目的 记录IDA动态调试步骤 2使用工具 逆向工具 IDA 7 0 Jadx 运行环境 Nexus 5 Android 4 4 3 原字符串信息 4
  • Vue - 使用Lodash进行深拷贝

    文章目录 深浅拷贝的理解 使用lodash 深浅拷贝的理解 浅拷贝 只是将数据中所有的数据引用下来 依旧指向同一个存放地址 拷贝之后的数据修改之后 也会影响到原数据的中的对象数据 例如 Object assign 扩展运算符 深拷贝 将数据
  • 利用xpath解析器爬取豆瓣电影top250

    首先声明需要用的库 当然我还用到了os库 将工作路径修改到了我指定的路径 os chdir r C Users from lxml import etree import requests import time import json 豆