首页 > 其他分享 >爬虫实战(一)爬取静态页面数据

爬虫实战(一)爬取静态页面数据

时间:2023-04-01 18:05:25浏览次数:39  
标签:URL 电影 爬虫 列表 爬取 详情页 如下 页面


前言  

我们以一个静态网站作为案例进行练习,网站链接为:https://ssr1.scrape.center/,这个网站里面包含一些电影信息。网站首页如下图所示:

         

爬虫实战(一)爬取静态页面数据_数据

         

我们点击其中一部电影,会进入该电影的详情页面,如下图所示:

爬虫实战(一)爬取静态页面数据_数据_02

我们需要爬取的信息为每部电影的名称、封面、类别、上映时间、评分、剧情介绍等内容,并把爬取的内容保存为JSON 文本文件,并使用多进程实现爬取加速;。

         

爬取过程  

这个网站有10个列表页,每个列表页有有10部电影,可以先爬取列表页的信息,从获取到的信息中获取详情页的URL,从而获取每部电影详情页的信息,对爬取的信息用正则表达式获取自己需要的数据,最后将数据保存在文件中。

爬取列表页

我们首先观察列表页的结构和翻页规则,在浏览器中访问https://ssr1.scrape.center/,然后打开浏览器开发者工具,如下图所示:

爬虫实战(一)爬取静态页面数据_保存数据_03

发现每部电影对应的区块都是一个 div节点,这些节点的class 属性中都有 el-card这个值,每个列表页有10个这样的div节点,也就是10部电影信息。每部电影名称外面都套有一个 a节点,这个a节点带有 href属性,这就是进行详情页的超链接。第一部电影 href的值为/detail/1,加上网站的根 URL 就构成了 https://ssr1.scrape.center/detail/1,这就是这部电影详情页的URL。通过观察每个列表页的URL,发现从第二页开始,列表页URL多了/page/2这部分,2为某一页的页码。

到这里,逻辑基本清晰了,我们要完成列表页的爬取,可以这么实现:

1、遍历所有页码,构造 10 页的列表页 URL;

2、从每个列表页,分析提取出每个电影详情页的 URL;

从代码层面需要这样做:

1、首先引入一些必要的库和定义一些基础变量,再编写一个函数完成一个页面的爬取:

爬虫实战(一)爬取静态页面数据_数据_04

2、编写一个函数自动生成每个列表页的 URL并返回爬取结果;

爬虫实战(一)爬取静态页面数据_数据_05

3、编写一个函数来解析列表页,获取每部电影详情页的 URL;.

爬虫实战(一)爬取静态页面数据_数据_06

到此,列表页抓取完成。

爬取详情页  

首先打开一个详情页的页面源码,分析要获取信息的节点,然后再使用正则表达式获取自己想要的信息,定义一个爬取详情页的方法,实现如下:

爬虫实战(一)爬取静态页面数据_保存数据_07

然后定义一个解析详情页的方法,它接收一个参数为html,解析其中的内容并以字典的形式返回, 实现如下:

爬虫实战(一)爬取静态页面数据_保存数据_08

保存数据

   成功提取详情页信息后,下一步就是保存数据,这里将数据保存为文本形式,如下所示:

爬虫实战(一)爬取静态页面数据_数据_09

这里我们首先定义保存数据的文件夹RESULTS_DIR,然后判断这个文件夹是否存在,如果不存在则创建一个。接着我们定义保存数据的方法save_data,将数据以json形式保存。

最后定义一个总的调用方法main,将之前的方法整合在一起,如下所示:

爬虫实战(一)爬取静态页面数据_多进程_10


多进程加速  

由于爬取是单线程的,而且只能逐条爬取,因此速度比较慢,可以对爬取过程进行优化,使用多进程爬取,具体实现代码如下:

爬虫实战(一)爬取静态页面数据_数据_11

我们首先给main方法添加了一个参数page,用以表示列表页的页码,接着声明一个进程池,最后进程池的大小根据我们的机器cup的核数,如果有8个核,则会有8个进程并行运行。

测试结果  

脚本输出结果如下:

爬虫实战(一)爬取静态页面数据_多进程_12

保存的数据如下:

爬虫实战(一)爬取静态页面数据_多进程_13

         

         

标签:URL,电影,爬虫,列表,爬取,详情页,如下,页面
From: https://blog.51cto.com/u_15634210/6163617

相关文章

  • 鸿蒙开发学习笔记-UIAbility-Router页面跳转接口源码分析
    在鸿蒙开发中,UIAbility的跳转使用router方法.在使用的时候需导入importrouterfrom'@ohos.router';该方法接口成员如下:1.interfaceRouterOptionsinterfaceRouterOptions{url:string;//跳转页面的Urlparams?:Object;//传给跳转页面的参数params......
  • h5移动端应用实现类似原生页面切换效果
    1.原理将vue-router中的跳转方法重写并监听,根据不同的跳转类型加载不同的过渡动画。2.实现创建router-helper.js文件exportconstDirectionType={//进入动画In:'in',//退出动画Out:'out',/**不应用动画,用于处理IOS侧滑冲突*/None:''}//路由动画export......
  • scrapy爬虫框架(三)Spider的使用
      在前面已经简单介绍了spider的基础用法,那么今天我们来详细了解一下Spider的具体用法。一、Spider的运行流程  spider是scrapy框架中最核心的组件,其定义了爬取网站的逻辑和解析方式,而spider主要做两件事情:定义爬取网站的动作。分析爬取下来的网页。  那么他的运行流......
  • 登录页面
        ......
  • 电影票选座HTML页面
    以下是一个简单的电影票选座的HTML页面示例:<!DOCTYPEhtml><html><head><title>电影票选座</title><style>/*样式表*/.seat{background-color:green;color:white;padding:10px;......
  • nginx启动成功,页面还是无法访问?
    问题如下图: 1.检查Nginx配置文件:nginx-t2.每次修改配置文件都要重新加载、启动nginx-sreload#重新载入配置文件nginx-sreopen#重启Nginx3.查看nginx进程 4.查看防火墙状态(不同Linux版本防火墙不同,以CentOSLinuxrelease7.9为例)查看状态:systemctlstatusfi......
  • 有关wordpress文章页面出现404的问题
    有关wordpress文章页面出现404的问题修复的时候总结了一下原因:1.未开启apache的rewrite功能2..htaccess文件中的伪静态规则配置错误3.由于目录存在中文,编码问题导致解决方案:1.未开启apache的rewrite功能:使用命令sudoa2enmodrewrite开启mod_rewrite,然后修改配置文件......
  • 微信开发:个人页面
    微信开发:个人页面wxml:<!--用户列表选项--><scroll-viewclass="scbg"scroll-y='true'><viewclass="parent_catainer"><!--头部--><!--style="background-image:url('/images/persons/mind_hea......
  • scrapy爬虫框架(二)scrapy中Selector的使用
      在scrapy框架前,相信大家或多或少的已经了解了一些网页数据解析方法,如:xpath、bs4、正则表达式等,但是在scrapy框架中也有一个内置的数据提取方法--Selector。在这里我们就先简单介绍一下Selector在scrapy中的运用及常用方法。  为了方便示例,我们以官方文档中的示例页面源码进......
  • Python爬虫利器之解析库的使用
    对于一个刚学Python爬虫的新手来说,学习Python爬虫里面的「解析库的使用」如果没有超强记忆力,估计是边学边忘,正所谓好记性不如烂笔头,在自己学些爬虫相关的知识点可以记录下来然后多次实践肯定比单凭记忆力要记得牢,下面我就把我学习的一些解析库的知识整理出来,供大家参考下。我的计......