18.网络爬虫—Scrapy实战演示

news2024/11/16 8:28:43

网络爬虫—Scrapy实战演示

  • Scrapy Shell简介
  • 进入shell调试网站
      • 启动Scrapy Shell
  • 查看目标网站
  • 获取网站源代码
  • 常用方法
  • 调试xpath
  • 提取数据
  • Scrapy请求子页面
      • 请求及返回处理
        • 创建项目
        • 创建爬虫
  • 数据解析
  • 写入csv文件
  • 后记

前言
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证
📝​📝第一篇文章《1.认识网络爬虫》获得全站热榜第一,python领域热榜第一
🧾 🧾第四篇文章《4.网络爬虫—Post请求(实战演示)》全站热榜第八
🧾 🧾第八篇文章《8.网络爬虫—正则表达式RE实战》全站热榜第十二
🧾 🧾第十篇文章《10.网络爬虫—MongoDB详讲与实战》全站热榜第八,领域热榜第二
🧾 🧾第十三篇文章《13.网络爬虫—多进程详讲(实战演示)》全站热榜第十二
🧾 🧾第十四篇文章《14.网络爬虫—selenium详讲》测试领域热榜第二十
🧾 🧾第十六篇文章《网络爬虫—字体反爬(实战演示)》全站热榜第二十五
🎁🎁《Python网络爬虫》专栏累计发表十七篇文章,上榜七篇。欢迎免费订阅!欢迎大家一起学习,一起成长!!
💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。


Scrapy Shell简介

🧾 🧾Scrapy是一个开源的Python框架,用于快速、高效地爬取网站数据。Scrapy提供了一组功能强大的工具和组件,使开发人员可以轻松地从网站上提取所需的数据。

🧾 🧾Scrapy Shell是一个命令行工具,可以让开发人员交互式地调试和探索网站。使用Scrapy Shell,开发人员可以轻松地测试Web爬虫并查看网站上的数据。

🧾 以下是Scrapy Shell的一些主要特点:

  1. 轻松进入交互式Shell只需输入“scrapy shell”命令即可进入交互式Shell。

  2. 可以直接访问网站并查看HTML源代码使用Scrapy Shell,您可以直接访问网站并查看其HTML源代码。这使您可以轻松地查找要提取的数据的位置。

  3. 支持XPath选择器和CSS选择器在Scrapy Shell中,您可以使用XPath或CSS选择器快速选择和提取所需的数据。

  4. 可以在Scrapy Shell中测试爬虫使用Scrapy Shell,您可以测试和调试Web爬虫,以确保其能够正确提取所需的数据。

  5. 支持调用各种Python函数和库在Scrapy Shell中,您可以轻松调用各种Python函数和库,以进一步处理所提取的数据。

Scrapy Shell是一个非常强大的工具,可以帮助开发人员快速而方便地开发和调试Web爬虫,提取所需的数据

进入shell调试网站

启动Scrapy Shell

🧾 🧾打开命令行终端,并进入一个Scrapy项目根目录,输入以下命令启动Scrapy Shell:

scrapy shell url

🎯这里以百度为例:

scrapy shell https://www.baidu.com/?tn=02003390_84_hao_pg&



🎯运行结果:
在这里插入图片描述

查看目标网站

🧾 🧾使用Scrapy Shell可以查看目标网站的内容,具体步骤如下:

  1. 打开命令行终端,在命令行中键入以下命令开始进入Scrapy Shell:
scrapy shell <url>   其中,`<url>`是目标网站的网址。
  1. 等待一段时间,直到Scrapy Shell加载完毕,显示下面的信息:
In [1]:
  1. 在Scrapy Shell中输入以下命令,获取目标网站的内容:
response.body
  1. 输入以下命令可以查看HTTP头信息:
response.headers
  1. 输入以下命令可以查看目标网页的标题:
response.xpath('//title/text()').get()
  1. 如需退出Scrapy Shell,请输入以下命令:
exit()
view(response)

在这里插入图片描述

获取网站源代码

response.body

在这里插入图片描述

常用方法

🧾 🧾输入response. 在这个时候按下键盘上的Tab键就可以实现参数选择

response.url  # 当前响应的url地址

response.request.url  # 当前响应对应的请求的url地址

response.text  # html字符串,str类型

response.body  # 广义上二进制的响应,bytes类型,相当于是response.content

response.body.decode()  # 对bytes类型的字符串进行解码,将其变为str类型,相当于是response.content.decode()

response.xpath()  # 调试我们的xpath表达式写地是否正确
response.xpath('//ul[@class="clears"]/li/div[@class="main_mask"]/h2[1]/text()').extract()

response.headers  # 响应头

response.request.headers  # 当前响应的请求头

调试xpath

🎯先将文本打印出来

response.text

在这里插入图片描述

response.xpath('/html/head/title/text()')

在这里插入图片描述

提取数据

 response.xpath('/html/head/title/text()').extract()

在这里插入图片描述

Scrapy请求子页面

请求及返回处理

创建项目

scrapy startproject douban_movie

在这里插入图片描述

创建爬虫

🎯进入到spiders文件下创建创建爬虫文件

cd douban_movie\douban_movie\spiders

创建爬虫
🎯命令[scrapy genspider 爬虫的名称 爬虫网站]

scrapy genspider movie movie.douban.com

创建成功
在这里插入图片描述
在这里插入图片描述

数据解析

title = response.xpath('normalize-space(string(//div[@id="content"]/h1))').extract()
        info = response.xpath('normalize-space(string(//div[@id="info"]))').extract()
import scrapy


class MovieSpider(scrapy.Spider):
    name = "movie"
    allowed_domains = ["movie.douban.com"]
    start_urls = [
        f'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start={i}&limit=20'
        for i in range(0, 100)]

    def parse(self, response, *_):
        urls = [i['url']for i in response.json()]
        yield from response.follow_all(urls=urls, callback=self.parse_t)


    def parse_t(self,response,*_):
        title = response.xpath('normalize-space(string(//div[@id="content"]/h1))').extract()
        info = response.xpath('normalize-space(string(//div[@id="info"]))').extract()
        print(title)
        # yield {
        #     'title': title,
        #     'info': info
        # }
        zip(title, info)
        for i in zip(title, info):
            print(i[0], i[1])
            yield {
                'title': title,
                'info': info
            }


在这里插入图片描述

写入csv文件

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import csv


class DoubanMoviePipeline:
    def __init__(self):
        self.f = open('电影.csv', 'w+', encoding='utf', newline='')
        self.csv_f = csv.writer(self.f)
        self.csv_f.writerow(['标题', '简介'])

    def process_item(self, item, spider):
        self.csv_f.writerow([item['title'], item['info']])
        return item

    def close_spider(self):
        self.f.close()
        print("信息写入完成!")

在这里插入图片描述

后记

👉👉本专栏所有文章是博主学习笔记,仅供学习使用,爬虫只是一种技术,希望学习过的人能正确使用它。
博主也会定时一周三更爬虫相关技术更大家系统学习,如有问题,可以私信我,没有回,那我可能在上课或者睡觉,写作不易,感谢大家的支持!!🌹🌹🌹

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

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

相关文章

Java,jdbc,jvm

1、数据删除 物理删除 直接发送delete语句 就是物理删除 这种删除 删除之后不可恢复逻辑删除 本质是更新 0 表示不可用 1 可用状态 update emp set is_active where id ?2、数据更新 1 显示所有数据 2. 点击修改按钮 此时 应该执行的动作-查询该用户信息 目的是将当前用户…

并发编程的那些事

目录 一、并发编程的目的 二、线程和进程2.1 什么是线程2.2 进程2.3 一个普通Java 程序包含哪些线程 三、并发、并行四、线程的六个状态五、wait 和sleep的区别5.1 位于不同的类5.2 关于锁的释放 一、并发编程的目的 并发编程的目的是为了让程序运行得更快&#xff0c;但是&…

类ChatGPT逐行代码解读(1/2):从零起步实现Transformer、ChatGLM-6B

前言 最近一直在做类ChatGPT项目的部署 微调&#xff0c;关注比较多的是两个&#xff1a;一个LLaMA&#xff0c;一个ChatGLM&#xff0c;会发现有不少模型是基于这两个模型去做微调的&#xff0c;说到微调&#xff0c;那具体怎么微调呢&#xff0c;因此又详细了解了一下微调代…

ggplot中坐标轴和图例的相关处理

文章目录 改变坐标轴和图例的名称方法1, labs()方法2&#xff0c;scale_xxx_discrete/continuous() 删除坐标轴和图例的名称方法1&#xff0c; labs()方法2&#xff0c;scale_xxx_discrete/continuous()方法3&#xff0c;theme()方法4&#xff0c;guides()可以去图例名称 改变图…

osgwidget 使用 方法以及案例分享

osgwidget 使用 方法以及案例分享 按钮 一个常见的 osg::Widget 就是按钮。下面的代码展示了如何使用 osg::Switch 和 osgText 创建一个简单的按钮&#xff1a; osg::ref_ptr<osg::Switch> buttonSwitch new osg::Switch(); osg::ref_ptr<osgText::Text> buttonTe…

[论文阅读] (29)李沐老师视频学习——2.研究的艺术·找问题和明白问题的重要性

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

写在28岁,回看3年前的自己,庆幸当时入了软件测试这行

为什么会学习软件测试&#xff1f; 已经28岁了&#xff0c;算一下快过去3年了&#xff0c;刚毕业那会工作了一年&#xff0c;因为自己当时很迷茫&#xff08;觉得自己挺废的&#xff09;&#xff0c;所以就没去工作就一直在家&#xff0c;家里固定每个月给点生活费&#xff0c…

人工智能、ChatGPT等火爆的当下 AI大模型爆发

4月18日&#xff0c;火山引擎在其举办的“原动力大会”上发布自研DPU等系列云产品&#xff0c;并推出新版机器学习平台&#xff1a;支持万卡级大模型训练、微秒级延迟网络&#xff0c;让大模型训练更稳更快。火山引擎总裁谭待表示&#xff0c;AI大模型有巨大潜力和创新空间&…

chatgpt实际是怎样工作的?

文章翻译自&#xff1a; https://www.assemblyai.com/blog/how-chatgpt-actually-works/ ChatGPT 是 OpenAI 的最新语言模型&#xff0c;比其前身 GPT-3 有了重大改进。与许多大型语言模型类似&#xff0c;ChatGPT 能够为不同目的生成多种样式的文本&#xff0c;但具有更高的精…

用ChatGPT搭建公司内部ChatGPT服务器

一、前言 我是ChatGPT&#xff0c;一个由OpenAI训练的大型语言模型。我被设计用于回答各种问题并生成文本&#xff0c;可以处理多种自然语言任务&#xff0c;例如问答、摘要和翻译等。在我的学习过程中&#xff0c;我阅读了数百万篇文本&#xff0c;并使用这些文本来提高我的理…

了解分布式Session

大家好&#xff0c;我这名CRUD工程师又来了&#xff0c;最近我的一个同事突然在看分布式Seesion的问题&#xff0c;然后我们两个也是互相讨论了一下&#xff0c;今天我就想着把分布式Session的知识点好好的梳理一下。 在很多系统中&#xff0c;用户的登录功能都是用Session去实…

Eclipse 4.27.0 制作并使用jar包

目的&#xff1a; 记录使用Eclipse 4.27.0 制作并使用jar包的过程&#xff0c;以备查看。 一&#xff0c;制作jar包 新建工程new ->Java Project 输入工程名&#xff0c;注意这里勾掉 Create module-info.java file的复选框&#xff0c;也可以在创建后自行删除该文件 后面…

[架构之路-171]-《软考-系统分析师》-5-数据库系统-4- 数 据 库 的 控 制 功 能(并发控制、性能优化)

目录 5 . 4 数 据 库 的 控 制 功 能 5.4.1 并发控制 1 . 事务的基本概念 2 . 数据不一致问题 3 . 封锁协议 4 . 死锁问题 5.4.2 数据库性能优化 1 . 硬件升级 2 . 数据库设计 5.4.3 数据库的完整性 1 . 完整性约束条件 2 . 实体完整性 3 . 参照完整性 4 . 用户定…

SVD求解ICP问题

Background ICP&#xff08;Iterative Closest Point&#xff09;问题&#xff0c;迭代最近点。已知一组三维点在两个坐标系中的坐标表示&#xff0c;求这两个坐标系之间的变换关系&#xff0c;称为ICP问题。 最开始想到这个问题&#xff0c;是想进行手眼标定&#xff0c;有一…

头歌c语言实训项目-综合案例课外练习:大奖赛现场统分

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 第1关&#xff1a;大奖赛现场统分 题目&#xff1a; 代码思路&#xff1a; 代码表示&#xff1a; 第1关…

【看图识文】tesseract.js@4.0.2

看图识文 介绍示例一示例二示例三示例四示例五示例六 介绍 该库用于识别并获取图片上的文字&#xff0c;支持多种语言。对英文识别度非常高&#xff0c;但是对中文的识别度非常一般。需要单独训练对应的中文库。对白纸黑字的合同文识别度还不错&#xff0c;其他的都不太好。 …

Android之编写申请权限库PermissionX

比如要实现拨打电话的功能&#xff0c;一般我们要编写如下Android运行时权限API class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)if(ContextCom…

日撸 Java 三百行day35

文章目录 说明day35 图的 m 着色问题1.问题描述2.思路2.代码 说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a;https://github.com/fulisha-ok/sampledata day3…

JUC安全/非安全容器

一、JUC java.util.concurrent下的类就叫JUC类&#xff0c;JUC下典型的类有&#xff1a; 1.ReentrantLock可重入锁 2.Semaphore信号量 3.CountDownLatch计数器 4.CyclicBarrier循环屏障 二、线程安全&非安全容器 2.1非线性安全容器 2.2线性安全容器 三、关于HashMap ha…

【谷歌浏览器 -- Vimium 常用快捷键】

文章目录 1.1.1 标签页管理1.1.2 网页操作1.1.3 打开链接1.1.4 搜索1.1.5 自定义搜索引擎短语1.1.6 Vimimu 使用注意事项 Vimium 是一款用键盘控制 Chrome 浏览器的 Chrome 插件, 可以在 Chrome 应用商店下载到. 下面列出个人比较习惯使用的几个快捷键。 1.1.1 标签页管理 [ x…