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

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 HtmlResponsefrom..items import MovieItemclass 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.htmlimport 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 openpyxlclass Spider2024Pipeline:def __init__(self):self.wb = openpyxl.workbook()self.ws = self.wb.activeself.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.mrgr.cn/news/78517.html

相关文章:

  • 如何免费进入知网查询资料!!免费分享各大图书馆资源
  • 【STL】用一棵红黑树同时封装set和map
  • C语言main()函数
  • 【人工智能】Python常用库-Scikit-learn常用方法教程
  • RHEL7+Oracle11.2 RAC集群-多路径(multipath+udev)安装步骤
  • 【rustdesk】客户端和服务端的安装和部署(自建服务器,docker,远程控制开源软件rustdesk)
  • JVM:即时编译器,C2 Compiler,堆外内存排查
  • 6.结果处理组件之ResponseHandler
  • 微信小程序蓝牙writeBLECharacteristicValue写入数据返回成功后,实际硬件内信息查询未存储?
  • Flink四大基石之窗口(Window)使用详解
  • 群控系统服务端开发模式-应用开发-邮箱配置功能开发
  • 全链接神经网络拟合函数
  • 【halcon】Metrology工具系列之get_metrology_object_result_contour
  • 数据类型.
  • 【CSS】clip-path 属性(剪裁显示区域)
  • 【FPGA】UART串口通信
  • 常见的Web安全漏洞——XSS
  • LayaBox1.8.4实现战争迷雾效果
  • 数据结构与算法——1125—面试题位运算
  • redis的主从复制
  • 【通用】操作系统 知识总结:IPC方式 / 进程线程 / 死锁 / 虚拟内存 / 段页存储
  • Oracle对比表与表之间的结构
  • 20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题
  • linux内核面试题精选及参考答案
  • 探讨播客的生态系统
  • 零基础快速掌握——C语言基础【数据类型】【运算符】