当前位置: 首页 > article >正文

scrapy爬虫框架小案例

豆瓣案例

  • 一、scrapy安装
  • 二、scrapy的基本使用(爬虫项目创建->爬虫文件创建->运行 + 爬虫项目结构 + response的属性和方法🌟)
    • 1、创建项目
    • 2、创建爬虫文件
    • 3、scrapy项目的结构
    • 4、运行爬虫文件
    • 5、response的属性和方法(爬虫的处理主要是对response进行操作,从这里开始主要对生成的爬虫文件进行操作)
  • 豆瓣案例:

一、scrapy安装

pip install scrapy

出错提示to update pip,请升级pip

python -m pip install --upgrade pip

如果下载过慢也可以先修改镜像,再下载

pip config set global.index-url https://pypi.doubanio.com/simple修改镜像

二、scrapy的基本使用(爬虫项目创建->爬虫文件创建->运行 + 爬虫项目结构 + response的属性和方法🌟)

1、创建项目

pycharm命令行终端中:
scrapy startproject 项目名 如:

scrapy startproject spider2024

2、创建爬虫文件

scrapy genspider 爬虫文件名 要爬取的网页 如:

scrapy genspider douban  https://movie.douban.com/

3、scrapy项目的结构

请添加图片描述

4、运行爬虫文件

 scrapy crawl 爬虫文件名

如:scrapy crawl douban

注释:在settings.py文件中,注释掉ROBOTSTXT_OBEY = True,才能爬取拥有反爬协议的网页

5、response的属性和方法(爬虫的处理主要是对response进行操作,从这里开始主要对生成的爬虫文件进行操作)

#该方法中response相当于response = request.get()
response.text ()        用于获取响应的内容
response.body ()      用于获取响应的二进制数据
response.xpath()       可以直接使用xpath方法来解析response中的内容
response.xpath().extract()      提取全部seletor对象的data属性值,返回字符串列表
response.xpath().extract_first()     提取seletor列表的第一个数据,返回字符串

豆瓣案例:

  1. douban.py
import scrapy

#from typing import Iterable
#from scrapy import Request
from scrapy.http import HtmlResponse

from..items import MovieItem


class DoubanSpider(scrapy.Spider):
    name = "douban"
    allowed_domains = ["movie.douban.com"]

    def start_requests(self):
        for page in range(10):
            yield scrapy.Request(url=f'https://movie.douban.com/top250?start={page*25}&filter=')

    def parse(self, response:HtmlResponse):
        list_tiems= response.css('#content > div > div.article > ol > li')
        for list_item in list_tiems:
            movie_item = MovieItem()
            movie_item['title'] = list_item.css('span.title::text').extract_first()
            movie_item['rank']= list_item.css('span.rating_num::text').extract_first()
            movie_item['subject'] = list_item.css('span.inq::text').extract_first()
            yield movie_item
        #
        # 获取分页器的链接,再利用scrapy.Request来发送请求并进行后续的处理。但会有个bug
        # href_list = response.css('div.paginator > a::attr(href)')
        # for href in href_list:
        #     urls = response.urljoin(href.extract())
        #     yield scrapy.Request(url=urls)
  1. item.py
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy

#爬虫获取到的数据需要组装成Item对象
class MovieItem(scrapy.Item):
    title = scrapy.Field()
    rank = scrapy.Field()
    subject = scrapy.Field()
  1. settings.py

修改请求头:

USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.1.6221.95 Safari/537.36"

随机延时:

DOWNLOAD_DELAY = 3
RANDOMIZE_DOWNLOAD_DELAY=True

保存文件设置:

ITEM_PIPELINES = {
   "spider2024.pipelines.Spider2024Pipeline": 300,#数字小的先执行
}

4.pipeline.py

import openpyxl

class Spider2024Pipeline:

    def __init__(self):
        self.wb = openpyxl.workbook()
        self.ws = self.wb.active
        self.ws.title='Top250'
        self.ws.append(('标题','评分','主题'))

    def close_spider(self, spider):
        self.wb.save('电影数据.xlsx')

    def process_item(self, item, spider):
        # self.ws.append((item['title'], item['rank'],item['subject']))
        # 这样获取数据,如果数据为空会报错;这里建议用get获取

        title=item.get('title','')#给个默认空值
        rank = item.get('rank', '')  # 给个默认空值
        subject = item.get('subject', '')  # 给个默认空值
        self.ws.append((title, rank, subject))
        return item


http://www.kler.cn/a/417080.html

相关文章:

  • 了解网络层
  • 【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
  • 信息科技伦理与道德3-2:智能决策
  • DeepSeek为何能爆火
  • Android性能优化
  • 蓝耘智算平台与DeepSeek R1模型:推动深度学习发展
  • 音视频-什么是帧,视频为什么要编码
  • 从 HTML 到 CSS:开启网页样式之旅(四)—— 长度单位与显示模式全解析
  • MFC 分段记录时间log类
  • 论文阅读:Dual-disentangled Deep Multiple Clustering
  • HCIE:详解OSPF,从基础到高级特性再到深入研究
  • 剧本字幕自己看
  • 鸿蒙系统(harmony)支持Android应用的双框架技术架构分析
  • 数据湖的概念(包含数据中台、数据湖、数据仓库、数据集市的区别)--了解数据湖,这一篇就够了
  • 实时数据开发|Flink实现数据输出--DataSinks操作
  • 实现PDF文档加密,访问需要密码
  • vue.js学习 (day 15)
  • 量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台
  • rabbitMq两种消费应答失败处理方式
  • 制作苹果IOS.APP所使用步骤和方法-有步骤视情况待完善
  • 三维渲染中顺序无关的半透明混合(OIT)(二——Stencil Route)
  • 电脑文件自动提取器介绍
  • WEB攻防-通用漏洞XSS跨站绕过修复http_onlyCSP标签符号
  • 计算机毕业设计Python异常流量检测 流量分类 流量分析 网络流量分析与可视化系统 网络安全 信息安全 机器学习 深度学习
  • 家校通小程序实战教程04教师管理
  • 【DB】根据某字段生成序号