Scrapy爬虫实战——某瓣250

# 按照我个人的习惯,在一些需要较多的包作为基础支撑的项目里,习惯使用虚拟环境,因为这样能极大程度的减少出现依赖冲突的问题。依赖冲突就比如A、B、C三个库,A和B同时依赖于C,但是A需要的C库版本大于N,而B库在C库版本大于N时会有依赖错误。如果是在同一个项目里三者都需要,那么我们必然要想办法解决,但是如果是在不同项目里,但是使用同一环境所引起的,那么只需要使用不同环境即可,能省去不少时间和精力。

一、新建项目

(一)新建python项目并创建虚拟环境

使用pycharm (社区版即可),新建一个项目,解释器就选新建虚拟环境。等待python解释器制作好虚拟环境后,在界面左下角找到终端,点击进入新建好的虚拟环境。

如果进入失败的话直接在终端找到该文件夹,进入到进入到当前创建虚拟目录的\env_demo\Scripts下,使用命令activate激活虚拟环境。

无论你是如何进入的终端,在命令行的最前面只要出现了虚拟环境名称,例如

(.venv) D:\pythonProject\scrapy\myscrapy>

那么就证明虚拟环境创建成功。

(二)安装scrapy库并新建一个scrapy项目

使用pip命令安装scrapy

pip install scrapy

在安装过程中可以看到安装了众多的依赖包,这就是为什么要使用虚拟环境的主要原因了——易于管理。

使用startproject新建scrapy项目,例如项目就叫douban

scrapy startproject douban

执行之后应该会提示两个命令,依次执行即可。

cd douban
scrapy genspider example example.com

scrapy genspider example example.com中example和example.com写哈

例如本次案例,就是scrapy genspider scrapydouban  https://movie.douban.com/top250

新建完成之后就可以看到如下项目结构。

二、完善项目

(一)准备工作

打开scrapydouban.py,代码如下。

import scrapyclass ScrapydoubanSpider(scrapy.Spider):name = "scrapydouban"allowed_domains = ["movie.douban.com"]start_urls = ["https://movie.douban.com/top250"]def parse(self, response):pass

name 就是我们的scrapy项目名字,这里改的话要到setting等文件里也要改哟!因为豆瓣250的请求网址的参数是每次递增25,所以我们需要重写一下start_requests,还有就是parse函数可能会报一个警告,需要加一个参数。重写之后的代码如下。

import scrapy
from scrapy import Request
from typing import Iterable
class ScrapydoubanSpider(scrapy.Spider):name = "scrapydouban"allowed_domains = ["movie.douban.com"]start_urls = ["https://movie.douban.com/top250"]def start_requests(self) -> Iterable[Request]:for i in range(10):url = f'https://movie.douban.com/top250?start={i * 25}&filter='yield scrapy.Request(url=url, callback=self.parse)def parse(self, response, **kwargs):pass

注意在start-requests中必须要有一个yield一下,将网址返回给引擎。

在parse中,response就是返回的response对象,初学时我们主要工作就是在这里。

(二)目标网页Xpath提取目标元素

首先定位到包含一整页的包含所有信息的li标签组成的集合。选中的xpath为

//*[@id="content"]/div/div[1]/ol//li

我们选取四个字段进行提取,标题、导演等信息文本、评分、评价人数和短评,提取相当于上述所提取的每个li的xpath。

出于规范管理,我们还可以在item文件里定义一下我们的字段,并且在scrapydouban中引用。

import scrapyclass DoubanItem(scrapy.Item):title = scrapy.Field()text = scrapy.Field()rating = scrapy.Field()review = scrapy.Field()quote = scrapy.Field()

完善后的parse函数如下。

    def parse(self, response, **kwargs):lis = response.xpath('//*[@id="content"]/div/div[1]/ol//li')  # 获取所有li标签for i in lis:item = DoubanItem()item['title'] = i.xpath('./div/div[2]/div[1]/a/span[1]/text()').extract_first()  # 标题item['text'] = i.xpath('./div/div[2]/div[2]/p[1]/text()[1]').extract_first().replace('\n','').strip().replace(' ', '')  # 文本item['rating'] = i.xpath('./div/div[2]/div[2]/div/span[2]/text()').extract_first()  # 评分item['review'] = i.xpath('./div/div[2]/div[2]/div/span[4]/text()').extract_first()  # 评价人数item['quote'] = i.xpath('./div/div[2]/div[2]/p[2]/span[1]/text()').extract_first()  # 短评print(item)yield item

三、运行项目

使用命令运行该项目

scrapy crawl scrapydouban

在终端就会输出很多的日志信息,但是我们希望的元素信息并没有打印出来。仔细看看日志信息。

响应是403,为什么?好像忘了加请求头了,那不就明摆着告诉目标服务器我是一个爬虫程序嘛,所以需要在setting.py中打开头部信息。

默认头部信息,建议完善更改

DEFAULT_REQUEST_HEADERS = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en",
}

再次使用命令启动项目

到此我们就已经可以得到目标元素了。后续章节还会介绍其他组件,包括中间件,数据库入库,js逆向调用等。

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

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

相关文章

Python中lambda表达式的使用——完整通透版

文章目录 一、前言二、 基本语法三、举个简单的例子:四、常见应用场景1. 用于排序函数sort() 方法简介lambda 表达式的作用详细解释进一步扩展总结 2、与 map、filter、reduce 等函数结合1、 map() 函数示例:将列表中的每个数字平方 2、 filter() 函数示…

音视频直播应用场景探讨之RTMP推流还是GB28181接入?

技术背景 好多开发者跟我们沟通音视频解决方案的时候,不清楚什么时候用RTMP推送模块,什么时候用GB28181设备接入模块,也不清楚二者差异化。实际上,RTMP推流和GB28181接入模块,在很多方面存在差异,如应用领…

centos 安装VNC,实现远程连接

centos 安装VNC,实现远程连接 VNC(Virtual Network Computing)是一种远程控制软件,可以实现通过网络远程连接计算机的图形界面。 服务器安装VNC服务 yum install -y tigervnc-server*启动VNC服务,过程中需要输入连接密码 vncserver :1查看…

云栖大会Day1:云应用开发平台 CAP 来了

2024 云栖大会开幕,在大会第一天,阿里云正式发布全新产品——云应用开发平台 CAP。CAP 拥有丰富的场景化应用模板,可以极速体验,并且具备更低的成本优势以及灵活组装等特点,成为广大开发者与企业必备的一站式应用开发平…

Stable Diffusion绘画 | ControlNet应用-instant-ID控制器:快速生成人物多角度图片

使用 instant-ID 控制器,用户只需要提供一张正脸图片,就可以快速地给人物生成多角度图片的,从而很好的保持了人物的一致性。 对于要制作小说推文、创建人物故事情节的创作,是一个非常好用且高效的功能。 准备工作 使用该控制类型&…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第一篇-原理】

如果想直接制作,请看【第二篇】内容 这次做一个这样的东西,通过在2DRT上实时绘制,生成动态的体积纹理,也就是可以runtime的VDB 设想的文章流程: 对原理进行学习制作体积渲染制作实时绘制 第一篇(本篇)是对“…

vue3+element-plus icons图标选择组件封装

一、最终效果 二、参数配置 1、代码示例 <t-select-icon v-model"selectVlaue" />2、配置参数&#xff08;Attributes&#xff09;继承 el-input Attributes 参数说明类型默认值v-model绑定值string-prefixIcon输入框前缀iconstringSearchisShowSearch是否显…

机器翻译之创建Seq2Seq的编码器、解码器

1.创建编码器、解码器的基类 1.1创建编码器的基类 from torch import nn#构建编码器的基类 class Encoder(nn.Module): #继承父类nn.Moduledef __init__(self, **kwargs): #**kwargs&#xff1a;不定常的关键字参数super().__init__(**kwargs)def forward(self, X, *args…

Git入门学习(1)

Git 00.准备工作-gitee注册 今天Git的设置中需要用到gitee的注册信息&#xff0c;先自行完成注册工作&#xff0c;可以 参考笔记 或第二天视频&#xff08;10.Git远程仓库-概念和gitee使用准备&#xff09; 传送门: gitee&#xff08;码云&#xff09;:https://gitee.com/ 注…

详解:冒泡排序

1.是什么 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成…

2024华为杯研赛D题保姆级教程思路分析+教程

2024年中国研究生数学建模竞赛D题保姆级教程思路分析 D题&#xff1a;大数据驱动的地理综合问题&#xff08;数学分析&#xff0c;统计学&#xff09; 关键词&#xff1a;地理、气候、统计&#xff08;细致到此题&#xff1a;统计指标、统计模型、统计结果解释&#xff09; …

c++249多态

#include<iostream> using namespace std; class Parent { public:Parent(int a){this->a a;cout << " Parent" << a << endl;} public:virtual void print()//在子类里面可写可不写 {cout << "Parent" <<a<&l…

OpenCV 2

目录 图像平滑处理 高斯与中值滤波 图像阈值 ​编辑 Canny边缘检测 非极大值抑制 边缘检测效果 轮廓检测方法 ​编辑 ​编辑​编辑 轮廓检测结果 轮廓特征与近似 图像平滑处理 以上两种出来的图片效果 以上的效果&#xff0c;因为填的是normalize False&#xff0c;越界…

Vue接入高德地图并实现基本的路线规划功能

目录 一、申请密钥 二、安装依赖 三、代码实现 四、运行截图 五、官方文档 一、申请密钥 登录高德开放平台&#xff0c;点击我的应用&#xff0c;先添加新应用&#xff0c;然后再添加Key。 如图所示填写对应的信息&#xff0c;系统就会自动生成。 二、安装依赖 npm i am…

艾丽卡的区块链英语小课堂

系列文章目录 IT每日英语&#xff08;三&#xff09; 文章目录 系列文章目录前言1.principle2.efficient3.implement4.accumulated5,occupation6.phases7.validator8.nominated9.commissions10.significantly 前言 欢迎来到艾丽卡的区块链英语小课堂&#xff0c;在这里&…

vmware + ubuntu + 初始配置(超级用户权限、vim安装、ssh登陆、共享文件夹、git)

1 VMware Ubuntu下载与安装 下载与安装 2 使用超级用户权限 &#xff08;1&#xff09;执行命令&#xff1a;sudo passwd root 然后在弹出的密码中输入密码即可&#xff0c;具体如下&#xff1a; 第一个密码是当前用户密码 后面两个是root用户密码 //推荐使用一个密码 3 vi…

航空航司reese84逆向

reese84逆向 Reese84 是一种用于保护网站防止自动化爬虫抓取的防护机制&#xff0c;尤其是在航空公司网站等需要严格保护数据的平台上广泛使用。这种机制通过复杂的指纹识别和行为分析技术来检测和阻止非人类的互动。例如&#xff0c;Reese84 可以通过分析访问者的浏览器指纹、…

基于PHP的电脑线上销售系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的电脑线上销售系…

免费音乐剪辑软件大揭秘:2024 大学生的音乐创作利器

对于音乐爱好者而言&#xff0c;如果你萌生了尝试音乐剪辑的念头&#xff0c;不妨先从探索一些免费工具开始。在此&#xff0c;我愿分享几款我个人体验过的、值得一试的音乐剪辑免费软件&#xff0c;希望能为你的音乐探索之旅增添乐趣与灵感。 1.福晰音频剪辑 链接直达>&g…

免费在线压缩pdf 压缩pdf在线免费 推荐简单好用

压缩pdf在线免费&#xff1f;在日常生活和工作学习中&#xff0c;处理PDF文件是常见任务。但有时PDF文件体积较大&#xff0c;给传输、存储和分享带来不便。因此&#xff0c;学习PDF文件压缩技巧十分必要。压缩PDF文件是指通过技术手段减小文件占用的存储空间&#xff0c;同时尽…