Scrapy爬虫实战——某瓣250

news2024/9/21 7:29:08

# 按照我个人的习惯,在一些需要较多的包作为基础支撑的项目里,习惯使用虚拟环境,因为这样能极大程度的减少出现依赖冲突的问题。依赖冲突就比如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 scrapy


class 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 scrapy


class 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.coloradmin.cn/o/2151689.html

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

相关文章

Linux系统查找文件的所属目录

在Linux下查找文件的所属目录方法较多,既可以在图形桌面系统中用搜索功能查找文件,也可以在字符终端窗口中用不同的命令查找不同类型文件并显示其所在目录,针对不同的文件类型,有不同的命令。 一、在图形桌面系统中查找 如图1&a…

利用 ARMxy边缘计算网关和 BLiotlink 软网关,实现工业智能化升级

在当今数字化、智能化的时代浪潮中,工业领域也在不断寻求创新与突破,以提高生产效率、降低成本并提升竞争力。ARM 工业计算机与 BLiotlink 协议转换软件的结合,为工业智能化带来了新的机遇和解决方案。 一、ARM 工业计算机的优势 ARM 工业计…

【4.4】图搜索算法-BFS和DFS两种方式解岛屿数量

一、题目 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条…

I2C中继器TCA9517A(TI)

一、芯片介绍 本芯片是一款具有电平转换功能的双向缓冲器,适用于I2C和SMBus系统,同时支持各种拓扑结构的扩展使用。芯片支持SCL和SDA缓冲,因此允许两条总线的负载电容达到400pF。 TCA9517A的A和B侧驱动器是不同的,但是均可耐受5…

Obsidian 全部笔记共享配置文件,obsidian仓库-文件夹配置统一化

obsidian仓库-文件夹配置统一化 在每次新建obsidian仓库(vaults)时,仓库的主题和快捷键等都需要重新设置,这是因为每次创建新的仓库时 新仓库的配置文件都是默认配置但是如果通过复制粘贴旧配置文件来达到新仓库的配置和旧仓库一致的话,无法…

kafka3.8的基本操作

Kafka基础理论与常用命令详解(超详细)_kafka常用命令和解释-CSDN博客 [rootk1 bin]# netstat -tunlp|grep 90 tcp6 0 0 :::9092 :::* LISTEN 14512/java [rootk1 bin]# ./kafka-topics.s…

MVCC机制解析:提升数据库并发性能的关键

MVCC机制解析:提升数据库并发性能的关键 MVCC(Multi-Version Concurrency Control) 多版本并发控制 。 MVCC只在事务隔离级别为读已提交(Read Committed)和可重复读(Repeated Read)下生效。 MVCC是做什么用的 MVCC是为了处理 可重复读 和…

数据安全治理

数据安全治理 1.数据安全治理2.终端数据安全加密类权限控制类终端DLP类桌面虚拟化安全桌面 3.网络数据安全4.存储数据安全5.应用数据安全6.其他话题数据脱敏水印与溯源 7.UEBA8.CASB 1.数据安全治理 数据安全治理最为重要的是进行数据安全策略和流程制订。在企业或行业内经常发…

酸枣病虫害智能化防控系统的探索与实践,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建枣类作物种植场景下酸枣病虫害智能检测识别系统

智慧农业,作为现代农业的高级形态,通过集成物联网、大数据、人工智能等先进技术,实现了农业生产过程的精准化、智能化管理。在酸枣等经济作物的种植过程中,病虫害的及时监测与防控直接关系到作物的产量与质量,进而影响…

Vue报错 ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

报错 vue-project0.0.0 dev vite‘vite’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。解决 第1步. 控制台输入 npm install -g create-vite第2步. 控制台输入 npm install -g vite第3步. 运行就ok啦

伊犁linux 创建yum 源过程

首先要创建yum 源这样后期的服务才能大面积部署 在su 用户下创建 清理缓存,一定要配置 这说明yum安装成功

笔记整理—内核!启动!—kernel部分(8)动态编译链接库与BSP文件

linux的C语言程序是用编译的,但是如果要在开发板上运行的话就不能使用默认的ubuntu提供的gcc编译器,而是使用arm-linux版本的一类的编译器。我们可以用file xx去查看一个程序的架构。 (arm架构) (intel的80386架构&…

Linux命令 —— grep/sed

一、grep命令 grep是Linux中最常用的“文本处理工具”之一,grep与sed、awk合称为Linux中的三剑客。 grep的全称为: Global search Regular Expression and Print out the line 所以,从grep的全称中可以了解到,grep是一个可以利用…

运维开发之堡垒机(Fortress Machine for Operation and Development)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

十种果冻的做法

菠萝果冻 1.在菠萝的1/5处切开,切去顶做盖子用,用水果刀在四周划一圈使皮和果肉分离 2.注意底部切透了,用水果刀把菠萝肉挖出,菠萝肉切丁用盐水浸泡备用 3.把菠萝丁放入料理机中加入少许纯净水,打成菠萝汁备用 4.打好…

伊犁-linux root 密码忘记咋办

1 root 密码忘记了 或者reboot 重启之后在引导界面 按住 e 进入如下界面 然后按住ctrlx 进入这个界面 root 修改成功

为什么512G的固态硬盘,电脑显示只有476G可用?

硬盘的标称容量与操作系统显示的可用容量存在差异,这是由于硬盘制造商和操作系统在计算容量时采用不同的进制标准所致。硬盘制造商通常使用10进制来标注硬盘容量,即1GB等于1000MB,而操作系统则使用2进制,即1GB等于1024MB。因此&am…

无人机视角电力巡检资产检测与异常判别数据集

无人机视角电力巡检资产检测与异常判别,资产检测关注17类目标,共10000余张无人机图像,json方式标注,类别如下: 1.Spiral Damper - 螺旋阻尼器 2.Stockbridge Damper - 斯托克布里奇阻尼器 3.Glass Insulator - 玻璃绝缘…

双击就可以打开vue项目,而不用npm run dev

右键点击桌面或其他位置,选择“新建” -> “快捷方式”,在“对象的位置”处直接输入“npm run dev”,然后下一步 自定义一个快捷方式名称 完成后,桌面会创建一个快捷方式,右键快捷方式选择属性,可以看…

智慧火灾应急救援航拍检测数据集(无人机视角)

智慧火灾应急救援。 无人机,直升机等航拍视角下火灾应急救援检测数据集,数据分别标注了火,人,车辆这三个要素内容,29810张高清航拍影像,共31GB,适合森林防火,应急救援等方向的学术研…