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

尚硅谷爬虫note16

一、crawlSpider

1. 安装scrapy

        终端中:pip install scrapy

2. 创建项目

        1)创建项目

scrapy startproject 项目名

        2)切换到spiders目录下

cd 项目名\项目名\spiders

        3)创建文件

scrapy genspider -t crawl 文件名 网址

        4)运行

scrapy crawl 文件名

        

3. 对文件中的rule进行修改

        鼠标悬浮在地址页上——右键检查:

        对rule中的正则表达式allow进行修改: 修改完成后会提取当前起始url(start_urls )的链接

allow=r'/book/1104_\d+\.html'

        其中:

\d:表示数字

+:表示1~多

\.:转义,使符号“.”生效

        对rule中的follow进行修改:

follow = False

1440(行)/40(行/页)/3(本/行)  = 12页(共13页),少了一页

        原因:规则里不包含首页

                只提取到2-13页

首页:

# 首页:1104_1
start_urls = ["https://www.dushu.com/book/1104_1.html"]

      1560行:

 

   

 2. 读书网

1)dsw.PY

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
#导入
from demo_dsw.items import DemoDswItem


class DswSpider(CrawlSpider):
    name = "dsw"
    #修改 allowed_domains范围:只保留域名
    allowed_domains = ["www.dushu.com"]
    # 首页:1104_1
    start_urls = ["https://www.dushu.com/book/1104_1.html"]

    rules = (Rule(LinkExtractor(allow=r'/book/1104_\d+\.html'),
                  callback="parse_item",
                  follow=False),)

    def parse_item(self, response):
        img_list = response.xpath('//div[@class = "bookslist"]//img')

        for img in img_list:
            name = img.xpath('./@data-original').extract_first()
            src = img.xpath('./@alt').extract_first()

           #创建一本书
            book = DemoDswItem(name = name, src = src)
            #返回
            yield book


        #CTRL + alt + L:查看book.json文件


2)items.PY

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class DemoDswItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # pass

    #书名
    name = scrapy.Field()
    #图片
    src = scrapy.Field()

3)pipelines.PY

# 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


class DemoDswPipeline:
    # 开启
    def open_spider(self,spider):
        self.fp = open('book.json','w',encoding='utf-8')

    def process_item(self, item, spider):
        # 中间:只能写字符串
        self.fp.write(str(item))
        return item

    # 关闭
    def close_spider(self,spider):
        self.fp.close()

4)settings.PY

解除注释:

ITEM_PIPELINES = {
   "demo_dsw.pipelines.DemoDswPipeline": 300,
}

3. scrapy的post请求

scrapy_post.PY

import json
from typing import Iterable

import scrapy
from scrapy import Request


class ScrapypostSpider(scrapy.Spider):
    name = "scrapyPost"
    allowed_domains = ["fanyi.baidu.com"]
    # post请求:
    # post请求必须依赖参数才能执行
    # 如果没有参数,post请求没有任何意义
    # status_urls也没用了
    # post方法也没用了
    # start_urls = ["https://fanyi.baidu.com/sug"]

    # def parse(self, response):

'
        # pass
def start_requests(self):
    url = 'https://fanyi.baidu.com/sug'
    data = {
            'kw': 'cat'
        }

    yield scrapy.FormRequest(url = url,formdata = data,callback = self.parse_second)

    def parse_second(self,response):
        content = response.text
        obj = json.loads(content,encodings = 'utf-8')
        print(obj)


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

相关文章:

  • 计算机操作系统(二) 操作系统的发展过程
  • 从学习ts的三斜线指令到项目中声明类型的最佳实践
  • winform中chart控件解决显示大量曲线数据卡顿方法——删旧添新法
  • linux下的离线升级替换脚本参考
  • ThinkPHP6用户登录系统的全过程
  • WPS二次开发系列:Android 第三方应用如何获取WPS端内文档
  • 计算机网络——DHCP
  • 蓝桥杯软件比赛_蓝桥杯软件比赛:软考前的实战演练场
  • 编写Dockerfile制作Redis镜像,生成镜像名为redis:v1.1,并推送到私有仓库。
  • 面试之《vue keep-alive原理》
  • Redis存数据就像存钱:RDB定期存款 vs AOF实时记账
  • 《HTML视觉大框架:构建现代网页设计的基石》
  • JVM内存结构笔记04-字符串常量池
  • CentOS 7系统初始化及虚拟化环境搭建手册
  • 基于django+vue的购物商城系统
  • 05.基于 TCP 的远程计算器:从协议设计到高并发实现
  • 图解AUTOSAR_CP_TcpIp
  • 1.数据清洗与预处理——Python数据挖掘(数据抽样、数据分割、异常值处理、缺失值处理)
  • 每天一道算法题【蓝桥杯】【下降路径最小和】
  • [多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现