python能做的100件事03-python爬虫

news/2023/5/28 8:07:06

文章目录

        • 1. scrapy介绍
        • 2 新建爬虫项目
        • 3 新建蜘蛛文件
        • 4 运行爬虫
        • 5 爬取内容
          • 5.1分析网页结构
          • 5.2 关于Xpath解析
          • 5.3 接着解析电影数据
          • 5.4 下载缩略图
          • 5.5 完整代码
        • 6 最后说明

本例基于python3和scrapy爬虫框架,不再介绍python的基础知识和爬虫的基本知识。

1. scrapy介绍

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

首先安装scrapy:

pip3 install scrapy

2 新建爬虫项目

scrapy startproject pic

项目目录如下:
项目目录

3 新建蜘蛛文件

蜘蛛文件放在spiders目录下,在spiders目录下新建一个蜘蛛文件pic.py,内容如下,并没有设计爬取操作,代码比较简单,看代码中的注释就明白了:

import scrapy#类名自定义,参数固定为scrapy.Spider
class GetImage(scrapy.Spider):name="pic" #蜘蛛名称,必须唯一,一个爬虫项目可以新建多个蜘蛛文件,蜘蛛名不能重复def start_requests(self):#定义要爬取的url    urls=['https://www.rottentomatoes.com/browse/movies_in_theaters/']#请求网页内容,并将内容交给回调函数处理for url in urls:# yield关键字类似return,scrapy.Request发起网页请求,括号内为参数,第一个参数是Request要请求的地址,第二个参数是回调函数,表示Request取到的内容交由该回调函数处理。yield scrapy.Request(url=url,callback=self.parse) #上一方法需要调用的回调函数def parse(self,response):print("------------------------")#此处获取上一步请求的网页内容及请求状态,print(response.body)可以获取网页内容,#因为内容太长,这里不再输出,只输出地址和状态。print(response)

4 运行爬虫

回到项目的根目录,运行如下命令:

scrapy crawl pic # crawl指定类文件中定义的蜘蛛名称pic

可以在运行日志中查看结果,200是网页连接正常的状态码:
在这里插入图片描述

5 爬取内容

上面代码中的网址是烂番茄网的电影页面,建议在测试时尽量选择测试网站进行测试,爬取信息时请遵守网站规定,并确认是否允许爬取.示例中的网页如下图所示:
示例网页

5.1分析网页结构

我们的目标是所有电影的名称和缩略图,首先通过F12查看网页的结构及目标节点的样式,如下图所示:
在这里插入图片描述可以看到只要找tile-dynamic节点下的img标签即可。scrapy中获取节点如下所示:
获取电影名称
运行爬虫,获取到的电影名称如下所示,是一个列表:
电影名称

5.2 关于Xpath解析

此处展示一些Xpath用法:

        #从html根节点查找最外层所有divdivs = response.xpath('//div')#从html根节点查找第一个divdiv = response.xpath('//div[1]')#从上面的div中查找所有p节点,注意此时开头用./不是//ps = div.xpath('./p')#从上面的div中查找所有样式为col-4的p节点ps1 = div.xpath('./p[@class="col-4"]')#循环获取ps1中所有p节点下的img图像地址for p in ps1:#获取节点属性以@开头如@alt,@src,@text等srcs = p.xpath('./img/@src').get() #或者getall(),p节点包含多张图片的情况#更多xpath请参考官方教程:#https://docs.scrapy.org/en/latest/topics/selectors.html#working-with-xpaths
5.3 接着解析电影数据

增加对缩略图的抓取,代码获取的缩略图如下图所示:

获取缩略图

缩略图地址

5.4 下载缩略图

图片下载

下载过程如图所示:
下载过程

下载内容:
下载内容

5.5 完整代码
import scrapy
import ssl
import os
import urllib#定义图片下载地址,请修改为自己的路径
d_path = '/home/ubuntu/下载/albums'#类名自定义,参数固定为scrapy.Spider
class GetImage(scrapy.Spider):name="pic" #蜘蛛名称,必须唯一,一个爬虫项目可以新建多个蜘蛛文件,蜘蛛名不能重复def start_requests(self):#定义要爬取的url    urls=['https://www.rottentomatoes.com/browse/movies_in_theaters/']#请求网页内容,并将内容交给回调函数处理for url in urls:# yield关键字类似return,scrapy.Request发起网页请求,括号内为参数,第一个参数是Request要请求的地址,第二个参数是回调函数,表示Request取到的内容交由该回调函数处理。yield scrapy.Request(url=url,callback=self.parse) #上一方法需要调用的回调函数def parse(self,response):print("--------------------------")#此处获取上一步请求的网页内容及请求状态,print(response.body)可以获取网页内容,#因为内容太长,这里不再输出,只输出地址和状态。print(response)#获取页面所有电影节点#xpath方式获取 //表示从页面根节点开始查找,查找tile-tynamic下的img标签#然后获取img标签下的alt属性,这里alt属性是电影的名字。#getall()表示获取所有匹配项,get()获取第一个匹配项names = response.xpath('//tile-dynamic/img/@alt').getall()#获取页面所有电影缩略图地址albums = response.xpath('//tile-dynamic/img/@src').getall()for index,album in enumerate(albums):#循环取出缩略图地址,交由函数downImg来完成图片下载#并传入参数name,用作下载的缩略图命名self.downImg(album,names[index])#图片下载方法def downImg(self,album,name):try:#下载图片,参数第一个是缩略图地址,第二个参数是文件保存地址+文件名称+后缀名urllib.request.urlretrieve(album,d_path+"/" + name + ".jpg")except Exception as e:print('下载异常:')print(e)passprint ('下载图片:' + name)

6 最后说明

一个简单的图片爬虫就完成了,一个功能复杂的爬虫,还需要解决登陆,分页,或者爬取到结果后入库等操作,这里就不多做解释,以后有空会更新登陆,分页等其他功能,没有空就不更新了。最后还要说明一点,爬取网络内容时请遵守相关法律法规,和网站规则。一般网站的根目录下都有robots.txt文件,请确保遵循了robots.txt的规则。比如烂番茄网的robots.txt规则如下:
robots
Disallow:/search 表示不允许爬取 /search下的所有网页。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊FBA问题分析

FBA是亚马逊提供物流配送服务的,使用亚马逊FBA能提高产品搜索权重,最重要的是使用亚马逊FBA能提升用户体验。 然而,FBA补货对于部分卖家来说问题较多,常见的有以下问题: 1、不同SKU的补货周期不一样。经常出现补完一个…

FBA_Matting(2020)

FBA_Matting(2020) 网络结构: 主要是一个Unet网络结构,编码encoder网络使用的是resnet-50,权重用imagenet训练的模型。相比于原始resnet-50有两处修改,a、输入从3通道改为9通道,其中包括rgb与3…

标签打印机打印亚马逊外箱FBA标签

如何把亚马逊FBA后台生成的6个一页的外箱标签拆分打印? 做过亚马逊的都知道。发FBA是后台会生成6个一页的外箱标签或者4页一个的外箱标签或 者1页一个的外箱标签,怎么将这些外箱标签拆分,使用10cm10cm热敏纸或铜版纸在条码标签打印机上打印&…

fba海运详解:fba海运是什么意思,FBA海运费用怎么算

FBA海运是指通过海运将货物运送到亚马逊仓库,FBA海运除了按照海运包税方式计算方法和海运不包税计算的渠道外,还会按货物的实重和体积重量来计算。FBA货运代理的操作流程是通关海运到目的港,然后通关送到亚马逊仓库。一、FBA海运什么意思 FBA…

fba海运是什么意思?FBA海运费用怎么算?

FBA海运是指通过海运将货物送到到亚马逊仓库,FBA货运代理的操作流程是通关海运到目的港,然后清关派送到到亚马逊仓库。FBA海运费用按照FBA海运包税渠道计算方式和FBA海运的不包税渠道计算方式,另外FBA海运会按实际重量和体积重这两者中的最大…

fba开发坑

坑 token失效登录框不消失问题 如果写在success里,框不消失进行跳转登录页面,登录成功后回来还显示请登录提示,导致无限登录的情况。 解决:把跳转方法放到complete里,等弹窗结束后再跳这个方法不行,得使用…

【医学数据融合文本方向 思路整理】

Scalable and accurate deep learning for electronic health records【2018】 本论文在于介绍 Google Medical Brain 项目的目标、方法和规划。 思路: 用病情描述,预测疾病诊断,预测死亡率 用病情描述加治疗方案,预测复诊率和住院…

收到银行短信你正在使用Android设备,手机收到扣费短信,无故被扣钱?小心自动订阅的大坑!...

原标题:手机收到扣费短信,无故被扣钱?小心自动订阅的大坑!近日,全国数家音视频网站被约谈,要求整改取消默认自动续费条约等。现在的付费方式越来越多,也越来越方便,而后衍生的自动订…

手把手教你如何开发融云短信服务

概述 为满足应用中短信验证业务需求,融云与优质短信平台合作,提供具有全网覆盖能力的短信验证码发送、验证功能接口,详细开通及使用说明如下: 短信功能使用流程 开发者在使用短信验证功能前,需前往融云官方网站注册…

阿里云短信验证服务

阿里云短信验证服务 阿里云短信验证是一个安全可靠易使用的第三方API,很多人在做项目时都会选择使用阿里云短信验证来做验证码模块的功能,今天我们就来学习如何使用阿里云短信验证。 登录阿里云官网添加短信验证服务 登录阿里云官网后进入如下页面。 阿…

InnoDB与MyISAM引擎的区别

1. InnoDB与MyISAM引擎的区别 常用引擎: – InnoDB:支持事务,行级锁,外键,崩溃修复,多版本并发控制;读写效率相对较差,内存使用相对较高,占用数据空间相对较大。 – MyI…

有些银行短信服务费从2元涨到3元,大家怎么看?

近日,济南市民曹先生收到了银行的通知:“尊敬的客户,自2019年5月1日起,山东地区借记卡客户短信渠道接收余额变动提醒服务价格将调整为包月3元/卡(账户)或包年优惠套餐30元/卡(账户)。…

电脑怎么添加音乐到计算机,PPT,插入本电脑的音乐,如何在另一台电脑上也能播放?谢谢!...

满意答案sbrjd1262016.03.14采纳率:46% 等级:10已帮助:1271人在PPT中插入一个视频,使它在其他电脑上也可以播放的步骤(以PPT 2007为例): 1、点OFFICE按钮——PowerPoint选项; 2、勾选【在功能区显示“开…

40 个定时任务,带你理解 RocketMQ 设计精髓!

大家好,我是君哥。今天来分享 RocketMQ 的定时任务。通过这些定时任务,能让我们更加理解 RocketMQ 的消息处理机制和设计理念。从 RocketMQ 4.9.4 的源代码上看,RocketMQ 的定时任务有很多,今天主要讲解一些核心的定时任务。1 架构…

微信有多少服务器支撑,终于支持多设备同时在线 微信新版本详细体验

闻香识人 听音辨人在新版微信中终于支持提示音修改功能(我→设置→新消息通知→消息提示音),目前有积木、可爱、空灵、俏皮、清脆、灵动、优雅七种提示音,不过还不支持自定义提示音。图1 消息提示音微信里的来电铃音听得都腻了,而且还不能修改…

Arduino基础学习——meArm(太极创客第二部分)

面包板电源模块为机器臂单独供电,机器臂本身有四个小电机驱动作用,如果单独靠arduino来为这四个小电机供电,机器臂可能不会稳定工作,将会抖动。 机械臂的四个动作主要靠四个电机来控制,这四个电机主要连接在我们的ard…

Power Query M公式——添加自定义字段(巧用运算符、IF ELSE IF计算)

首先我们要了解一下Power Query高级编辑里面的M公式是什么? 官方定义:Microsoft Power Query 提供了包含许多功能的强大数据导入体验。 Power Query 适用于 Analysis Services、Excel 和 Power BI 工作簿。 Power Query 的核心功能是筛选和合并&#xf…

双目相机国产、非国产统计参数对比分析

双目相机国产、非国产统计参数对比分析 ZED ZED是STEREOLABS出品的双目摄像头,广泛应用在科研机构的无人车、协作机械臂上,如图2-1所示。其3D分辨率在Ultra模式下可达到RGB时的分辨率,具体见图2-2,物理尺寸为1753033mm&#xff…

计算机一级单元格公式设置错误是什么原因,公式出错怎么办?使用IFERROR函数!...

关注考无忧哟~IFERROR函数,对于新手同学来说,这个函数是比较陌生的;不过等你真正了解它之后,你会很喜欢使用这个函数了。因为在Excel中IFERROR函数可以帮我们判断哪些内容是由公式产生的错误值,判断这个值的正确与否&a…

excel IF公式判断两列是否相同

D2公式为:IF(A2B2,"相同","不同"),这样就可以实现excel两列对比,判断A2和B2是否相同,如果相同就返回值“相同”,反之则显示不同。