python scrapy爬取网站数据(二)

news2024/12/25 1:06:30

用法很简单,先安装Scrapy,我这里是win10环境,py3.10+

安装scrapy

pip install Scrapy

在这里插入图片描述
显示如图安装完毕

创建项目

在这里插入图片描述

分三步创建

scrapy stratproject spiderdemo #创建spiderdemo 项目,项目名随意取
cd spiderdemo #进入项目目录下
scrapy genspider nmdis www.nmdis.org.cn #爬虫名为nmdis ,后面接url

在这里插入图片描述
项目创建完配置venv虚拟环境,目的是为了每个项目用自己的包,当然也可以不配置用全局环境,至此环境搭建完成。

例子:爬取网页 https://www.nmdis.org.cn/hyxw/gnhyxw/ 新闻模块

nmdis.py文件

import scrapy
from scrapy import Selector, Request
from scrapy.http import HtmlResponse

from spiderdemo.items import DetailItem


class NmdisSpider(scrapy.Spider):
    name = "nmdis"
    allowed_domains = ["nmdis.org.cn"]

    def start_requests(self):
        for page in range(1):
            print(f"爬取页数:{page + 1}")
            if page < 1:
                yield Request(url=f'https://www.nmdis.org.cn/hyxw/gnhyxw/')
            else:
                yield Request(url=f'https://www.nmdis.org.cn/hyxw/gnhyxw/index_{page + 1}.shtml')

    # 获取详情页的url
    def parse(self, response: HtmlResponse):
        sel = Selector(response)
        url_items = sel.css("div.title.fl.ellipsis > a::attr(href)")
        for url in url_items:
            detail_item = DetailItem()
            detail_item['details_url'] = response.urljoin(url.extract())
            details_url = response.urljoin(url.extract())
            # 回调
            yield Request(url=details_url, callback=self.parse_detail, cb_kwargs={'item': detail_item})

    # 获取详情页数据
    def parse_detail(self, response, **kwargs):
        detail_item = kwargs['item']
        sel = Selector(response)
        detail_item['title'] = sel.xpath('//h2[@class="maintit"]/text()').extract_first()
        detail_item['source'] = sel.xpath('//em[@class="fl"]/text()').extract_first()
        detail_item['release_time'] = sel.xpath('//em[@class="fr"]/text()').extract_first()
        detail_arr = sel.xpath('//div[@class="bodytext"]//text()').extract()
        detail_item['context'] = "".join(detail_arr)
        yield detail_item

items.py文件

import scrapy


class DetailItem(scrapy.Item):
    details_url = scrapy.Field()
    title = scrapy.Field()
    source = scrapy.Field()
    release_time = scrapy.Field()
    context = scrapy.Field()

配置settings.py代理 f12 在请求里面找一个就行
在这里插入图片描述
在这里插入图片描述
scrapy crawl nmdis运行即可

导入到excel

导入openpyxl包
pip install openpyxl

pipelines.py 编写管道输出

class SpiderdemoPipeline:

    def __init__(self):
        self.wb = openpyxl.Workbook()
        self.ws = self.wb.active
        self.ws.title = '标题测试'
        self.ws.append(('来源地址', '标题', '信息来源', '发布时间', '内容'))

    def close_spider(self, spider):
        self.wb.save('爬取数据.xlsx')

    def process_item(self, item, spider):
        details_url = item.get('details_url') or ''
        title = item.get('title') or ''
        source = item.get('source') or ''
        release_time = item.get('release_time') or ''
        context = item.get('context') or ''
        self.ws.append((details_url, title, source, release_time, context))
        return item

settings.py打开管道配置
在这里插入图片描述
scrapy crawl nmdis运行即可

实用命令

可以在自己的项目中生成包文件

pip freeze > requirements.txt #生成pip文件

若存在requirements文件可以导入其他项目中的包依赖

pip install -r requirements.txt #安装文件的依赖项

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

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

相关文章

【多线程初阶】第一次认识线程

多线程初阶系列目录 持续更新中 1.第一次认识线程 … 文章目录 多线程初阶系列目录前言1. 线程概念1.1 线程是什么1.2 为什么需要线程1.3 进程和线程的区别1.4 Java线程和操作系统线程的关系 2. 第一个Java多线程程序3. 创建线程的方法3.1 继承 Thread 类3.2 实现 Runnable 接…

深兰科技发布《深兰数字智能产业系列报告(2023年):个人数字化》

近日&#xff0c;深兰科技发布《深兰数字智能产业系列报告(2023年)&#xff1a;个人数字化》&#xff0c;这是深兰科技在数字智能产业领域发布的首份研究报告&#xff0c;也是国内第一份个人数字化产业报告。此报告是在上海市经济和信息化委员会和上海市产业技术创新促进会的共…

星辰天合公司产品完成阿里云 PolarDB 数据库产品生态集成认证

近日&#xff0c;XSKY星辰天合旗下产品与阿里云 PolarDB 开源云原生数据库展开产品集成认证测试&#xff0c;并获得阿里云颁发的产品生态集成认证证书。 测试结果表明&#xff0c;星辰天合旗下的融合计算管理平台 XHERE&#xff08;V2&#xff09;、统一数据平台 XEDP&#xf…

appuploder全过程使用教程(Windows版本)

appuploder全过程使用教程&#xff08;Windows版本&#xff09; 转载&#xff1a;使用appuploader工具流程&#xff08;Windows版本&#xff09; 一.登录apple官网&#xff0c;注册账号 1.注册苹果账号 Sign In - Apple 2.登录开发者中心 &#xff0c;出现协议弹框&#xf…

Android 画面显示流程一

DRM,英文全称 Direct Rendering Manager, 即 直接渲染管理器。 DRM是linux内核的一个子系统,提供一组API,用户空间程序,可以通过它,发送画面数据到GPU或者专用图形处理硬件,也可以使用它执行诸如配置分辨率,刷新率之类的设置操作。原本是设计提供PC设备支持复杂的图形设。…

浏览器配置环境

疯掉了 希望是最后一次 0.配置WinSCP和PUTTY 在Windows上使用PuTTY进行SSH连接-腾讯云开发者社区-腾讯云 1.配置conda 如何在Linux服务器上安装Anaconda&#xff08;超详细&#xff09;_linux安装anaconda_流年若逝的博客-CSDN博客 实验室远程登录Linux服务器并配置环境_远…

docker容器更改映射端口

问题描述&#xff1a; 我们在docker中开启nginx以后&#xff0c;如果这时候在nginx中配置除了80以外的端口的监听&#xff0c;会发现无法访问&#xff0c;这时候其实是因为我们没有开启端口映射导致的。 目前发现有两种解决方案 如下&#xff1a; 目录 一. 修改配…

Android AIDL基本使用

AIDL是Android多进程通讯方式一种。 如要使用 AIDL 创建绑定服务&#xff0c;请执行以下步骤&#xff1a; 创建 .aidl 文件 此文件定义带有方法签名的编程接口。 实现接口 Android SDK 工具会基于您的 .aidl 文件&#xff0c;使用 Java 编程语言生成接口。此接口拥有一个名为…

树莓派Pico与MicroSD卡模块接口及MicroPython编制读写MicroSD存储卡程序

介绍树莓派&#xff08;RPi&#xff09;Pico开发板(或树莓派Pico W无线开发板)与MicroSD卡模块SPI接口技术原理及SPI接口硬件连接的具体步骤&#xff0c;讲述采用MicroPython和SDCard类编制程序读写MicroSD存储卡的方法&#xff0c;给出读写MicroSD存储卡文件的测试程序。 一、…

创建数据库Market、Team,按要求完成指定操作

创建数据库Market&#xff0c;在Market中创建数据表customers&#xff0c;customers表结构如表4.6所示&#xff0c;按要求进行操作。 代码如下&#xff1a; #(1&#xff09;创建数据库Market mysql> create database Market; Query OK, 1 row affected (0.00 sec)mysql>…

Windows系统中将markdown文件批量转化为PDF

需要将一个文件夹下的多个md文件转化为PDF 下载安装pandoc 官网下载地址&#xff1a;Pandoc &#xff0c;下载位置如下图。 下载后按照默认文件路径安装完成 使用everything软件查找pandoc.exe文件路径&#xff0c;如下图&#xff1a; 安装完成之后就可以在cmd窗口或Window…

Cyclo(L-Asp-L-Gly),52661-97-9,定制含D型与L型氨基酸

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09; 试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; Cyclo(L-Asp-L-Gly)&#xff0c;52661-97-9&#xff0c;&#xff08;活性药物…

荧光染料92557-81-8,FAM NHS ester,6-isomer,用于标记核苷酸的荧光试剂

6-羧基荧光素琥珀酰亚胺酯 6-FAM&#xff0c; 用于标记核苷酸的荧光试剂&#xff0c;6-羧基荧光素琥珀酰亚胺酯是一种化学物质。荧光标记染料在生物分析中发挥越来越重要的作用&#xff0c;特别是6-羧基荧光素已经成为检测蛋白质&#xff0c;DNA序列的国际通用的荧光染料。 6-F…

变压器绝缘电阻测试试验

试验目的 电力变压器是发电厂、 变电站和用电部门最主要的电力设备之一&#xff0c; 是输变电能的电器。 测量绕组绝缘电阻、 吸收比和极化指数&#xff0c; 能有效地检查出变压器绝缘整体受潮&#xff0c; 部件表面受潮脏污&#xff0c; 以及贯穿性的集中行缺陷&#xff0c; …

Revit柱的绘制:陶立克柱绘制方法和生成柱

​  一、Revit陶立克柱的绘制方法 BIM等级考试一级第十期第四题陶立克柱该如何绘制呢?接下来我演示给大家。 陶立克柱看似很复杂&#xff0c;其实很简单&#xff0c;只需要先绘制好柱身&#xff0c;会用到阵列工具的使用再绘制柱子上部或下部分&#xff0c;最后采用镜像工具…

spring系列所有漏洞vulhub复现CVE-2022-22978、CVE-2022-22963、CVE-2022-22965、CVE-2018-1273

文章目录 CVE-2022-22978 Spring-security 认证绕过漏洞漏洞描述:复现&#xff1a; CVE-2022-22963漏洞描述:复现&#xff1a; 提提神Spring框架Data Binding与JDK 9导致的远程代码执行漏洞&#xff08;CVE-2022-22965&#xff09;漏洞描述:复现&#xff1a; Spring Data Commo…

智慧水务信息化建设——看“厂、站、网”一体化综合监管

平台概述 智慧水务信息化平台是以物联感知技术、大数据、智能控制、云计算、人工智能、数字孪生、AI算法、虚拟现实技术为核心&#xff0c;以监测仪表、通讯网络、数据库系统、数据中台、模型软件、前台展示、智慧运维等产品体系为支撑&#xff0c;以城市水资源、水生态、水环…

Intellij IDEA突然无法启动问题

遇到的情况&#xff1a;Intellij IDEA 双击或者鼠标右键右键单击都无法启动&#xff0c;打开任务管理器也没有Intellij IDEA线程启动。 解决方法&#xff1a; 第一步&#xff1a;以管理员身份打开命令提示符&#xff0c;输入命令(“ netsh winsock reset ”)&#xff0c;关闭…

机器学习15:神经网络-Neural Networks

神经网络是特征交叉的更复杂版本。本质上&#xff0c;神经网络会学习适当的特征组合。本文主要介绍神经网络的结构、隐藏层、激活函数等内容。 目录 1.神经网络&#xff1a;结构 2.隐藏层 3.激活函数 3.1 常用激活函数 3.2 小结 4.神经网络小练习 4.1 第一个神经网络 …

异步请求(Ajax,axios,json)

同步/异步请求 表单&#xff08;前端&#xff09;向后端发送请求,属于同步请求 同步: 发一个请求, 给一个回应, 会用回应的内容覆盖掉浏览器中内容&#xff0c;这样会打断前端其他的正常操作&#xff0c;在现在的前端中&#xff0c;显得不太友好。 异步: 不同步 前端正常输入时…