用python爬猫眼电影,简单网站却有 “多重思路” !

news/2024/5/19 8:46:52/文章来源:https://shalouzaixiayu.blog.csdn.net/article/details/108226257

七夕不看电影就爬电影吧。猫眼电影作为爬虫的必备练手网站,相信每个人都试过吧? 那么这篇文章,我就再爬一次猫眼电影,而且用上正则和xpath一起,分别保存为excel表格和csv表格,(text文本这个就太简单了,自动忽略), 所以这篇文章,虽然网站熟悉,但是内容上的干货确实不少。希望大家能学到一点东西!

在这里插入图片描述

今天是七夕,没人陪你去看电影, 那么我就教你先爬下电影吧, 希望来年,你可以梦想实现!

【喜欢的话记得关注,点赞,和收藏哟!】
【博主其他文章】:我的首页


目录

    • 爬虫思路:
      • 分析页面:
      • 构造页面参数:
      • 请求网址:
      • 解析网址:
        • 使用xpath解析网址:
        • 使用正则去匹配信息:
      • 保存数据:
        • 保存为excel:
        • 保存为csv:
      • 全部代码:

爬虫思路:

  • 本次爬取网站为: https://maoyan.com/board/4?offset=0
  • 本次爬虫函数库:
import re
import requests
from lxml import etree
from openpyxl import Workbook # pip install openpyxl 操作excel 表格的优秀库
import csv  # 操作csv表格

这些函数库没有的话 就自己下载一下, 下载慢出现timeout的话,需要搭配一下国内镜像网站。 百度一下 清华镜像

  • 本次爬虫代码思路: 面向过程的简单操作
  • 本次爬虫主要侧重于解析页面和保存数据二大模块,有需求可以直接跳转阅读。

分析页面:

拿到这个网站的第一步,就是分析页面, 切不可着急,直接套用代码而上!

  • 查看网页源代码之后, 你可以找到页面中对应的数据, 如图:
    在这里插入图片描述
    这说明这个网站就是很中规中矩的静态网站了, 你想怎么耍就可以怎么耍。

  • 因为是要爬取T100或者更多, 观察每一页的网址特点,我们发现:

https://maoyan.com/board/4?offset=0 1
https://maoyan.com/board/4?offset=10 2
https://maoyan.com/board/4?offset=20 3
每一页都是offset的不同变化,那我们字符串的构造就可以完成这个任务,得到任意页的网址。

  • 当我们拿到每一页的网址,只需要向服务器发送请求,得到返回后的html页面,然后就可以进行不同的解析工作了, 在解析中,我们可以提取我们要的数据,将这些数据进行二次加工, 在返回, 那么就可以进入到我们保存数据的过程了, 在保存数据的时候,我们可以采用不同的方式进行保存,在这边文章中,我使用了excel和 csv 二种方式去保存,这样可以增加自己的代码练手率, 方便自己熟悉各种方式的保存。

构造页面参数:

 for i in range(10):url = 'https://maoyan.com/board/4?offset={}'.format(i * 10)html = spider(page_url=url)

就直接这样用字符串构造一下就行了,很简单。


请求网址:

def spider(page_url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/83.0.4103.106 Safari/537.36'}r = requests.get(page_url, headers=headers)if r.status_code == 200:return r.textelse:print(r.status_code)

带上一些必要的信息, 就可以伪装一下,发送请求,返回页面源代码。


解析网址:

使用xpath解析网址:

在这里插入图片描述

我们可以通过浏览器发现, 每个电影都在在标签dd中, 但是我们还是要根据dl标签来遍历下面的dd标签,方便得到如下数据! 最后使用枚举 enumerate() 去返回一个参数字典。
代码如下:

def parse_xpath_page(page_html):html = etree.HTML(page_html)title = html.xpath('//dl/dd/div/div/div[1]/p/a/text()')  # 10actress = html.xpath('//dl/dd/div/div/div[1]/p[2]/text()')time = html.xpath('//dl/dd/div/div/div[1]/p[3]/text()')score1 = html.xpath('//dl/dd/div/div/div[2]/p/i[1]/text()')score2 = html.xpath('//dl/dd/div/div/div[2]/p/i[2]/text()')for index, value in enumerate(title):yield {'title': value.strip(),'actress': str(actress[index]).strip(),'time': time[index],'score': score1[index] + score2[index]}

使用正则去匹配信息:

正则这个东西,在爬虫中真不到万不得已的时候才使用, 个人感觉,在这个网址,我们练练手, 打开网页源代码。如下:
在这里插入图片描述
我们要的数据都在每一个dd标签中, 所以我们需要编写正则表达式, 这里我编写了二种表达式,都可以实现。 关于不会正则的朋友,希望自己去学一下。

result = re.findall(r'<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'r'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'r'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', page_html, re.S)result = re.findall(r'<dd>.*?board-index.*?>(\d+)</i>'r'.*?data-src="(.*?)".*?</a>'r'.*?name.*?<a.*?>(.*?)</a></p>'r'.*?<p.*?star.*?>(.*?)</p>'r'.*?<p.*?releasetime.*?>(.*?)</p>'r'.*?<p.*?score.*?integer.*?>(.*?)</i>'r'.*?fraction.*?>(.*?)</i></p>.*?</dd>', page_html, re.S)

二种都差不多, 有点细微差别。

代码如下:

def parse_re_page(page_html):# result = re.findall(r'<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'#                     r'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'#                     r'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', page_html, re.S)result = re.findall(r'<dd>.*?board-index.*?>(\d+)</i>'r'.*?data-src="(.*?)".*?</a>'r'.*?name.*?<a.*?>(.*?)</a></p>'r'.*?<p.*?star.*?>(.*?)</p>'r'.*?<p.*?releasetime.*?>(.*?)</p>'r'.*?<p.*?score.*?integer.*?>(.*?)</i>'r'.*?fraction.*?>(.*?)</i></p>.*?</dd>', page_html, re.S)if result:for content in result:yield {"id": content[0],'img_path': ''.join(content[1].split('@')[0]).strip(),'title': content[2].strip(),'actress': content[3].strip(),'time': content[4].strip(),'score': content[5] + "" + content[6]}

保存数据:

数据的保存,至关重要。

保存为excel:

能直接操作excel 表格的库确实有很多,但是我喜欢用openpyxl, 我觉得这个最好耍, 简单的一些配置,就能直接上手。
代码如下:

workbook = Workbook()
sheet = workbook.active  # 获取激活的表格
sheet.title = '猫眼TOP100'  
sheet['A1'] = 'title'
sheet['B1'] = 'actress'
sheet['C1'] = 'time'
sheet['D1'] = 'score'

因为之前我传过来的数据是字典类型的, 但考虑到openpyxl能直接操作的是列表类型,所以有如下修改:

def save_excel(item):a = []  # 列表暂存for key, value in item.items():a.append(value)sheet.append(a)  # 保存

保存为csv:

直接操作csv的函数库 我觉得只有csv库最香了。

因为字典类型, 我们需要设置表头, 但是设置表头需要注意不要多次设置, 可能表中存在多个表头,应该这样:

# 先设置表头 关闭文件with open('猫眼top.csv', 'a+', newline='', encoding='utf-8') as fw:header = ['id', 'img_path', 'title', 'actress', 'time', 'score']fw_csv = csv.DictWriter(fw, header)fw_csv.writeheader()
# 再写入数据def save_csv(item):header = ['id', 'img_path', 'title', 'actress', 'time', 'score']with open('猫眼top.csv', 'a+', encoding='utf-8', newline='') as fw:fw_csv = csv.DictWriter(fw, header)fw_csv.writerow(item)

全部代码:

import re
import requests
from lxml import etree
from openpyxl import Workbook
import csvdef spider(page_url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/83.0.4103.106 Safari/537.36'}r = requests.get(page_url, headers=headers)if r.status_code == 200:return r.textelse:print(r.status_code)def parse_xpath_page(page_html):html = etree.HTML(page_html)title = html.xpath('//dl/dd/div/div/div[1]/p/a/text()')  # 10actress = html.xpath('//dl/dd/div/div/div[1]/p[2]/text()')time = html.xpath('//dl/dd/div/div/div[1]/p[3]/text()')score1 = html.xpath('//dl/dd/div/div/div[2]/p/i[1]/text()')score2 = html.xpath('//dl/dd/div/div/div[2]/p/i[2]/text()')for index, value in enumerate(title):yield {'title': value.strip(),'actress': str(actress[index]).strip(),'time': time[index],'score': score1[index] + score2[index]}def parse_re_page(page_html):# result = re.findall(r'<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'#                     r'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'#                     r'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', page_html, re.S)result = re.findall(r'<dd>.*?board-index.*?>(\d+)</i>'r'.*?data-src="(.*?)".*?</a>'r'.*?name.*?<a.*?>(.*?)</a></p>'r'.*?<p.*?star.*?>(.*?)</p>'r'.*?<p.*?releasetime.*?>(.*?)</p>'r'.*?<p.*?score.*?integer.*?>(.*?)</i>'r'.*?fraction.*?>(.*?)</i></p>.*?</dd>', page_html, re.S)if result:for content in result:yield {"id": content[0],'img_path': ''.join(content[1].split('@')[0]).strip(),'title': content[2].strip(),'actress': content[3].strip(),'time': content[4].strip(),'score': content[5] + "" + content[6]}def save_excel(item):a = []for key, value in item.items():a.append(value)sheet.append(a)def save_csv(item):header = ['id', 'img_path', 'title', 'actress', 'time', 'score']with open('猫眼top.csv', 'a+', encoding='utf-8', newline='') as fw:fw_csv = csv.DictWriter(fw, header)fw_csv.writerow(item)if __name__ == '__main__':flag = int(input('1:to_excel\n2:to_csv\nplease enter you chooser:'))if flag == 1:workbook = Workbook()sheet = workbook.activesheet.title = '猫眼TOP100'sheet['A1'] = 'title'sheet['B1'] = 'actress'sheet['C1'] = 'time'sheet['D1'] = 'score'for i in range(10):url = 'https://maoyan.com/board/4?offset={}'.format(i * 10)html = spider(page_url=url)for item in parse_xpath_page(html):save_excel(item=item)print('数据保存成功!')workbook.save(filename='猫眼top.xlsx')workbook.close()elif flag == 2:with open('猫眼top.csv', 'a+', newline='', encoding='utf-8') as fw:header = ['id', 'img_path', 'title', 'actress', 'time', 'score']fw_csv = csv.DictWriter(fw, header)fw_csv.writeheader()for i in range(10):url = 'https://maoyan.com/board/4?offset={}'.format(i * 10)html = spider(page_url=url)for item in parse_re_page(html):save_csv(item=item)print('数据保存成功!')

七夕不看电影就爬电影吧。猫眼电影作为爬虫的必备练手网站,相信每个人都试过吧? 那么这篇文章,我就再爬一次猫眼电影,而且用上正则和xpath一起,分别保存为excel表格和csv表格,(text文本这个就太简单了,自动忽略), 所以这篇文章,虽然网站熟悉,但是内容上的干货确实不少。希望大家能学到一点东西!

【喜欢的话记得关注,点赞,和收藏哟!】
【博主其他文章】:我的首页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_781628.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每周推荐一本书 - 《大型网站技术架构》

这本书是阿里资深架构师写的一本书 不去评论作者的能力&#xff0c;对于新手来说&#xff0c;我觉得这本书是对于大型网站后台建设思路的扫盲书&#xff0c;很值得小白一读。 本书特点&#xff1a; 1.纯概念性内容&#xff0c;认字的都能读&#xff0c;不需要很强的编程基础…

2020年没被淘汰的IT精英都看这14个全球知名网站

马上2020了&#xff0c;我身边很多同事又开始准备新一轮面试&#xff0c;他们来自阿里&#xff0c;IBM&#xff0c;Oracle&#xff0c;airbnb等&#xff0c;他们从不自称大神。我问他们平时都是从哪里学新技术&#xff0c;外企经验都精英总结们得出结论&#xff0c;国内互联网的…

【阿里云ECS进阶训练营】day01搭建自己的专属网站与云笔记

目录一&#xff1a;课程介绍二&#xff1a;安装VuePress1.连接ECS服务器2.设置实例安全组3.安装Node.js4.安装VuePress三&#xff1a;配置VuePress1、基本配置步骤2.首页配置示例一&#xff1a;课程介绍 VuePress是受欢迎的极简静态网站生成器&#xff0c;它还未书写技术文档而…

520创意表白网站,让女友对你死心塌地。女神轻松领回家

可能很多女生都会觉得程序员都是直男&#xff0c;不懂浪漫。但是&#xff01;&#xff01;&#xff01;看完这个教程之后&#xff0c;让女友对你死心塌地。 这是一个基于js和html搭建的简单界面&#xff0c;你只需要把代码下载下来&#xff0c;然后再简单的改一下代码信息&…

网站开发——旅游网项目(简单前后台实现)

目录 前言 一、网站使用前后台展示 二、开发过程 准备工作&#xff08;技术选型、创建Maven工程、导包、创建实体类、工具类&#xff09; 技术选型 其他的一些准备工作就不赘述了&#xff0c;代码全在我最下面的提取文件中。 逻辑思路&#xff08;后台到前台&#xff09…

h5网站对服务器要求高么,专业网页设计师告诉你,H5究竟是什么?

原标题&#xff1a;专业网页设计师告诉你&#xff0c;H5究竟是什么&#xff1f;H5是Html5的简称&#xff0c;最近两年H5是互联网领域极为火爆的名词&#xff0c;并由此诞生了不少垂直型H5制作企业&#xff0c;一些互联网巨头也早早准备&#xff0c;或开发或投资或收购&#xff…

GitHub+Hexo 搭建个人网站详细教程

一、什么是Hexo ? Hexo是一款基于Node.js的静态博客框架&#xff0c;依赖少易于安装使用&#xff0c;可以方便的生成静态网页托管在GitHub和Heroku上&#xff0c;是搭建博客的首选框架。这里我们选用的是GitHub&#xff0c;你没看错&#xff0c;全球最大的同性恋交友网站&…

email邮件中 内嵌iframe_网站搭建8:Django项目中嵌入Jupyter notebook

最近感兴趣研究了一下量化交易&#xff0c;在聚宽&#xff08;JoinQuant&#xff09;网站中看到网页中嵌入了Jupyter notebook&#xff08;多语言支持的Html笔记本应用程序&#xff09;。而我也经常使用Jupyter测试神经网络等机器学习算法&#xff0c;如果可以把Jupyter架设在自…

吐血推荐-巧用网站配置文件提升权限!!!

巧用网站配置文件提升权限本文已被***手册杂志2007年第三期收录朋友给我发来一个Asp的Webshell的地址&#xff0c;然后又给我发了一条消息“痛苦&#xff0c;拿到Webshell&#xff0c;由于权限太低&#xff0c;什么也干不了&#xff01;&#xff08;图1&#xff09;”&#xff…

程序员常用的技术网站

&#xff08;http://stackoverflow.com/&#xff09;这个网站我几乎可以不用介绍了&#xff0c;就算你们不常用&#xff0c;就算每次你都用搜索引擎去找编程相关问题都有很大可能跳入此网站。此网站用途&#xff1a;当你碰到任何编程问题&#xff0c;就去搜索该问题&#xff0c…

php的bom头会影响格式,完美解决由bom头引发的非法字符#65279;出现php网站模板或功能问题...

今天为一个客户解决网页模板问题发现一个有意思的问题&#xff0c;客户还是对代码有些小懂&#xff0c;自己尝试着改了一下&#xff0c;结果发现头部多出来一个空行&#xff0c;找到我以后&#xff0c;随即f12查看了一下&#xff0c;一看乐了&#xff0c;出现了个&#xfeff;字…

SeleniumPhantomJS获取网站中的JS返回的数据

一、安装Selenium模块 pip install selenium Selenium 是一套完整的Web应用程序测试系统&#xff0c;包含了测试的录制、编写及运行和测试的并行处理。二、安装PhantomJS(官网下载&#xff1a;http://phantomjs.org/&#xff09; 下载后放在python安装目录&#xff0c;和…

一步一步SharePoint 2007之十六:注册并配置一个网站用户

在前面的文章中&#xff0c;我已经介绍了如何创建管理帐户。创建其它帐户的方法是一样的。大家可以把这个注册系统放到自己的网站中&#xff0c;就可以成为网站的一部分了。本文将只讲解如何在管理工具中将用户手动加入到网站用户组中&#xff0c;至于如何将注册完后的用户自动…

破解网站验证码

概述 很多开发者都讨厌网站的验证码&#xff0c;特别是写网络爬虫的程序员&#xff0c;而网站之所以设置验证码&#xff0c;是为了防止机器人访问网站&#xff0c;造成不必要的损失。现在好了&#xff0c;随着机器学习技术的发展&#xff0c;机器识别验证码的问题比较好解决了。…

最热开源静态网站生成器 TOP 20

1、静态站点生成器 Jekyll Jekyll 是一个简单的免费的Blog生成工具&#xff0c;类似WordPress。但是和WordPress又有很大的不同&#xff0c;原因是jekyll只是一个生成静态网页的工具&#xff0c;不需要数据库支持。但是可以配合第三方服务,例如discuz。最关键的是jekyll可以免费…

配件查询网站用java,基于jsp的配件管理系统-JavaEE实现配件管理系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的配件管理系统, 该项目可用各类java课程设计大作业中, 配件管理系统的系统架构分为前后台两部分, 最终实现在线上进行配件管理系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类配件管理系统相关的实体…

linux查看当前服务器是什么文件系统,linux文件系统中每个文件用什么来标识_网站服务器运行维护,linux...

linux如何查看tomcat进程_网站服务器运行维护linux查看tomcat进程的方法&#xff1a;首先进入linux系统&#xff1b;然后启动tomcat&#xff1b;接着执行命令“ps aux | grep tomcat”和“ps -ef | grep tomcat”即可查看正在运行的tomcat进程。linux文件系统中每个文件用什么来…

微软MSN Virtual Earth网站

MSN Virtual Earth网站已可以登录&#xff0c;有视频演示和图片&#xff0c;发布据说在今年夏天。http://www.virtualearth.com/视频演示&#xff1a;http://www.virtualearth.com/msnvirtualearth.asx下面是最新报道&#xff1a;在美国旧金山举行的互联网及地理信息服务会议“…

网站运营之比较和差异化

网站运营之比较和差异化人类内心有很多情绪&#xff0c;其中一种最基本的情绪是嫉妒。人类社会的幸福不在于你拥有什么&#xff0c;而在于比较。这个比较可能是负面的&#xff0c;也可能是正面的。比如说&#xff0c;良好的竞争&#xff0c;这是一种正向的比较&#xff0c;能够…

SEO专题之四:如何合理有效选定关键字

上一篇我们讲到了SEO与网站开发的中的注意事项,这篇文章继续结合上一篇内容继续讲解,如何合理有效的选定关键字.我们都知道.搜索引擎的工作是按你在文本框内输入的关键字来查找内容相匹配的网页.如果查找到则在搜索列表中显示出来,那么是不是你只要指定了相应的关键字浏览者就一…