Python 爬虫 之scrapy 框架

在这里插入图片描述

文章目录

  • 常用的命令
  • 开始爬虫
    • 请求与响应
    • 让控制台只输出想要的信息
    • 创建一个py 文件来帮忙运行爬虫
  • 工作原理图
  • 实战
  • scrapy 本身自带的选择器
  • 使用全部scrapy 自身选择器进行爬虫
  • 爬取多个网站

常用的命令

Scrapy是一个用于爬取网站数据的Python框架,以下是一些常用的Scrapy命令:

开始的时候 用 cd 进入你想创建scrapy 的文件夹 ,然后开始下面的操作

  1. 创建新的Scrapy项目:

    scrapy startproject project_name
    

    这个命令会创建一个新的Scrapy项目,其中project_name是你为项目指定的名称。

  2. 创建一个新的Spider:

    scrapy genspider spider_name website_url
    

    这个命令会生成一个新的Spider文件,你需要提供spider_name作为Spider的名称和website_url作为爬取的起始网址。

  3. 运行Spider:

    scrapy crawl spider_name
    

    这个命令会启动指定的Spider,开始爬取数据。你需要将spider_name替换为你要运行的Spider的名称。

  4. 导出爬取数据为JSON文件:

    scrapy crawl spider_name -o output.json
    

    这个命令会运行Spider并将爬取的数据导出为一个JSON文件。你可以将output.json替换为你想要的输出文件名和格式。

  5. 导出爬取数据为CSV文件:

    scrapy crawl spider_name -o output.csv
    

    这个命令与上面的命令类似,不过它将数据导出为CSV格式。

  6. 查看可用的Spider:

    scrapy list
    

    这个命令会列出项目中所有可用的Spider,你可以选择其中一个来运行。

  7. 检查Spider的数据爬取情况:

    scrapy crawl spider_name --loglevel=INFO
    

    这个命令会以INFO级别的日志显示Spider的爬取情况,有助于调试和监视爬取过程。

  8. 检查Spider的爬取速度和性能:

    scrapy crawl spider_name --profile=output.cprofile
    

    这个命令会生成性能分析文件,你可以使用工具来分析Spider的性能瓶颈。

开始爬虫

请求与响应


import scrapyclass ExampleSpider(scrapy.Spider):name = "example" #爬虫的名字(唯一)allowed_domains = ["ssr1.scrape.center"] # 限定的域名,可选start_urls = ["https://ssr1.scrape.center/"] #当前的域名def parse(self, response): # 当在命令行运行scrapy crawl example 之后会发送请求,得到一个响应对象responceprint(response.text)print(response.status)pass

让控制台只输出想要的信息

在你的settings 文件中加入

LOG_FILE = "爬虫名字.log"

在这里插入图片描述

这样,那些日志就只会存储在日志文件中,而不是在控制台中

创建一个py 文件来帮忙运行爬虫

在你的爬虫项目里创建一个py 文件
在这里插入图片描述

在你的run 文件中

from scrapy.cmdline import executeexecute(["scrapy","crawl","example"])
# 对应于你的运行scrapy crawl example
#这样你就可以直接运行run 文件来实现你的结果了

工作原理图

在这里插入图片描述

实战

网站https://ssr1.scrape.center/爬取电影名
在这里插入图片描述


import scrapy
from lxml import etreeclass ExampleSpider(scrapy.Spider):name = "example" #爬虫名字allowed_domains = ["ssr1.scrape.center"] #限定的域名(可选)start_urls = ["https://ssr1.scrape.center/"]# 起始的域名def parse(self, response):html = etree.HTML(response.text)#对返回的html 文本进行解析allname = html.xpath(r'//h2[@class="m-b-sm"]/text()')# 寻找电影名字print(allname)pass

效果:
在这里插入图片描述

scrapy 本身自带的选择器

Scrapy 提供了一个强大的选择器(Selector)工具,用于解析和提取 HTML 或 XML 中的数据。选择器提供了类似于 XPath 和 CSS 选择器的语法,使你能够以简单而灵活的方式定位和提取所需的数据。

Scrapy 的选择器主要有两种:基于 XPath 的 Selector 和基于 CSS 选择器的 SelectorList。你可以使用这两者中的任意一种或两者结合使用,具体取决于你更喜欢使用的语法和场景。

以下是使用 Scrapy 选择器的简单示例:

import scrapyclass MySpider(scrapy.Spider):name = 'example'start_urls = ['https://example.com']def parse(self, response):# 使用 XPath 选择器titles_xpath = response.xpath('//h2[@class="title"]/text()').extract()for title in titles_xpath:self.log(f'Title (XPath): {title}')# 使用 CSS 选择器titles_css = response.css('h2.title::text').extract()for title in titles_css:self.log(f'Title (CSS): {title}')

在这个例子中,response.xpathresponse.css 方法返回的是选择器对象,可以使用 .extract().extract_first() 方法从中提取数据。在解析网页时,你可以使用这些选择器选择和提取网页中的元素和数据。

如果你需要更复杂的解析,Scrapy 还提供了 ItemItemLoader,用于定义和加载结构化的数据,以及在爬取和处理数据时提供更高层次的抽象。

使用全部scrapy 自身选择器进行爬虫

当加上注释时,通常需要解释代码中的关键步骤、选择器以及数据处理部分。以下是加上注释的代码:

import scrapyimport pandas as pdclass ExampleSpider(scrapy.Spider):name = "example"  # 爬虫名字start_urls = ["https://www.bookschina.com/24hour/62700000/1_0_0"]def parse(self, response):# 存储数据的列表namestore = []pricestore = []htmlstore = []# 使用 XPath 选择器提取书名、价格和图片网址allname = response.xpath(r'//h2[@class="name"]/a/text()').extract()allprice = response.xpath(r'//div[@class ="priceWrap"]/span[@class = "sellPrice"]/text()').extract()allhtml = response.xpath(r'//div[@class = "cover"]/a/img/@data-original').extract()# 遍历并将数据添加到列表for name in allname:namestore.append(name)for htmla in allhtml:htmlstore.append(htmla)for price in allprice:pricestore.append(price[1:])  # 去掉价格前面的符号(假设价格以符号开始)# 创建 DataFrame 并保存为 Excel 文件data = {"书名": namestore, "价格": pricestore, "图片网址": htmlstore}df = pd.DataFrame(data)df.to_excel(r"d:\Desktop\电影.xlsx")

这些注释涵盖了代码的主要部分,解释了从网页中提取数据的步骤以及数据存储的方式。请注意,注释可以根据你的实际需求进一步详细或调整。

注意,上面的代码是没有使用etree 模块的

爬取多个网站


import scrapy
from lxml import etree
import pandas as pd
class ExampleSpider(scrapy.Spider):name = "example" #爬虫名字#allowed_domains = ["ssr1.scrape.center"] #限定的域名(可选)start_urls = ["https://www.bookschina.com/24hour/62700000/1_0_1","https://www.bookschina.com/24hour/62700000/1_0_2","https://www.bookschina.com/24hour/62700000/1_0_3"]def parse(self, response):namestore = []pricestore = []htmlstore = []#responce.xpath 返回的是一个选择器对象,通过extract 可以得到具体内容allname = response.xpath(r'//h2[@class="name"]/a/text()').extract()allprice = response.xpath(r'//div[@class ="priceWrap"]/span[@class = "sellPrice"]/text()').extract()allhtml = response.xpath(r'//div[@class = "cover"]/a/img/@data-original').extract()for name in allname:namestore.append(name)for htmla in allhtml:htmlstore.append(htmla)for price in allprice:pricestore.append(price[1:])data = {"书名":namestore,"价格":pricestore,"图片网址":htmlstore};d = pd.DataFrame (data)try:p = pd.read_excel(r"d:\Desktop\2223.xlsx")except FileNotFoundError:p = pd.DataFrame()# 合并新数据和已有数据combined_data = pd.concat([p, d])# 保存到 Excel 文件combined_data.to_excel(r"d:\Desktop\2223.xlsx", index=False)

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

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

相关文章

activemq启动成功但web管理页面却无法访问

前提: 在linux启动activemq成功!本地能ping通linux 处理方案: 确定防火墙是否关闭, 有两种处理方案:第一种-关闭防火墙;第二种-暴漏8161和61616两个端口 netstat -lnpt查看8161和61616端口 注意&#xf…

JavaWeb-Tomcat

1. Web服务器 web服务器由硬件和软件组成: 硬件:计算机系统软件:计算机上安装的服务器软件,安装后可以为web应用提供网络服务。 常见的JavaWeb服务器: Tomcat(Apache):应用最广泛的…

Java毕业设计源码—vue+SpringBoot图书借阅管理图书馆管理系统

主要技术 SpringBoot、Mybatis-Plus、MySQL、Vue3、ElementPlus等 主要功能 管理员模块:注册、登录、书籍管理、读者管理、借阅管理、借阅状态、修改个人信息、修改密码 读者模块:注册、登录、查询图书信息、借阅和归还图书、查看个人借阅记录、修改…

第二十一章

网络通信这一章 基本分为三个部分 网络基础概念和TCP,UDP这三个部分主要如下: 计算机网络实现了堕胎计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序,这些程序借助于网络协议&#xf…

html刷题笔记

1 em 12 pt 16 px 100% source元素为audio、video、picture元素指定多个媒体文件 margin是用来隔开元素与元素的间距;padding是用来隔开元素与内容的间隔。 margin用于布局分开元素使元素与元素互不相干;padding用于元素与内容之间的间隔,…

Swift 中 User Defaults 的读取和写入

文章目录 前言介绍 User Defaults共享 User DefaultsUser Defaults 存储数据类型响应更改监控 User Defaults 更改覆盖User Defaults 设置考虑的替代方案Keychain 用于安全性用于跨平台的 CloudKit 结论 前言 User Defaults 是 Swift 应用程序存储在应用启动之间保持的首选项的…

我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

图像处理一 一、阈值处理1.1 OpenCV 提供了函数 cv2.threshold()和函数 cv2.adaptiveThreshold(),用于实现阈值处理1.1.1. cv2.threshold():(1)在函数cv2.threshold()中,参数threshold_type用于指定阈值处理的方式。它有以下几种可选的阈值类…

应用程序中实现用户隐私合规和数据保护合规的处理方案及建议

随着移动互联网的发展,用户隐私合规和数据保护合规已经成为应用开发过程中不可忽视的重要环节。为了帮助开发者实现隐私和数据保护合规,本文将介绍一些处理方案和建议。 图片来源:应用程序中实现用户隐私合规和数据保护合规的处理方案及建议 …

Spring IOC,DI原理保姆级带你了解如,让面试官感到你的魅力

Spring IOC,DI原理保姆级带你了解如,让面试官感到你的魅力 一,什么是IOC 1.开始:Spring IoC容器的创建。 容器初始化:初始化IoC容器,包括加载配置文件、解析配置文件等。 加载XML/Java配置文件&#xff1…

『Jmeter超级干货』| Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程

『Jmeter超级干货』| Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程 1 JDK安装部署1.1 JDK下载1.2 JDK配置 2 Jmeter安装部署2.1 Jmeter下载2.2 Jmeter安装2.3 Jmeter相关目录配置2.4 Jmeter启动配置2.5 检查并启动 3 Jmeter汉化3.1 临时修改3.2 永久修改 4 准备测…

快照读通过MVCC解决不可重复读当前读通过间隙锁解决幻读

简介 Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。 *往期知识不做重点 事务具有4个特征,分别是原子性、一致性、隔…

毕设:《基于hive的音乐数据分析系统的设计与实现》

文章目录 环境启动一、爬取数据1.1、歌单信息1.2、每首歌前20条评论1.3、排行榜 二、搭建环境1.1、搭建JAVA1.2、配置hadoop1.3、配置Hadoop环境:YARN1.4、MYSQL1.5、HIVE(数据仓库)1.6、Sqoop(关系数据库数据迁移) 三、hadoop配置内存四、导…

用 PHP和html做一个简单的注册页面

用 PHP和html做一个简单的注册页面 index.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

【Proteus】绘制简单的电路图

参考书籍&#xff1a;微机原理与接口技术——基于8086和Proteus仿真&#xff08;第3版&#xff09;&#xff08;作者&#xff1a;顾晖等&#xff09;&#xff0c;p111 1.放置元件 以8086为例&#xff1a; 确保处于元件模式&#xff0c;点击对应的按钮&#xff1a; 在元件库中…

【离散数学】——期末刷题题库(等价关系与划分)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

邮政单号查询,邮政快递物流查询,并进行提前签收分析

批量查询邮政快递单号的物流信息&#xff0c;并将提前签收件分析筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff0c…

JAVA全栈开发 MySql详解

一、数据库 1.数据储存在哪里&#xff1f; 硬盘、网盘、U盘、光盘、内存&#xff08;临时存储&#xff09; 数据持久化 使用文件来进行存储&#xff0c;数据库也是一种文件&#xff0c;像excel &#xff0c;xml 这些都可以进行数据的存储&#xff0c;但大量数据操作&#x…

商家门店小程序怎么做?门店小程序的优势和好处

生活服务类商家在当前数字化时代&#xff0c;越来越认识到门店小程序的重要性。门店小程序不仅为商家提供了一个在线展示的窗口&#xff0c;更为其打造了一个与消费者直接互动的平台。有了门店小程序&#xff0c;商家可以更加便捷地管理商品信息、订单流程&#xff0c;同时还能…

网络机房的功能有哪些?

网络机房的功能主要包括&#xff1a; 信息存储和管理&#xff1a;机房作为信息系统的核心&#xff0c;需要提供可靠的存储和管理能力&#xff0c;包括服务器、存储设备、备份系统等硬件设备&#xff0c;以及数据备份、数据迁移、容灾等管理方法和技术。网络连接和通信&#xf…

北京市经信局局长姜广智带队调研三六零 强调大模型应与行业结合

12月6日&#xff0c;北京市经济和信息化局局长姜广智、副局长王磊带队走访调研三六零集团&#xff0c;就共促城市级数字安全基础设施项目落地&#xff0c;打造引领行业发展标杆项目&#xff0c;推动大模型落地应用赋能产业、行业发展等话题进行交流。360集团创始人周鸿祎接待来…