基础:
一、安装scrapy框架
pip install scrapy
pip --default-timeout=2000 install -U scrapy
来下载scrapy让它的延迟检测时间变长。
windows下,还需要安装 pip install pypiwin32

二、创建项目和爬虫(同一项目,爬虫名字唯一)
创建项目: scrapy startproject 项目名称
创建传统爬虫: 项目所在路径(show in Explorer),执行命令: scrapy genspider [爬虫名字] [爬虫的域名] # “qiushibaike.com”

三、项目目录结构
items.py: 用来存放爬虫爬取下来数据的模型
middlewares.py: 用来存放各种中间件的文件
pipelines.py: 用来将items的模型存储到本地磁盘中
settings.py: 本爬虫的一些配置信息(比如请求头,多久发送一次请求,ip代理池等)
修改配置参数:
将ROBOTSTXT_OBEY = False , True的话,爬虫将会去查找robots协议,没找到,会返回空
DEFAULT_REQUEST_HEADERS = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36’ # 伪装成浏览器访问
}
DOWNLOAD_DELAY = 1 # 设置下载速度,延迟1s,以免过度消耗网站

scrapy.cfg: 项目的配置文件
spiders包: 以后所有的爬虫,都是存放到这里面

四、运行爬虫
方式一、cmd中运行: 项目——右键——show in Explorer——进入项目中——scrapy crawl 爬虫名称
方式二、创建py文件,导入cmdline

from scrapy import cmdline
cmdline.execute("scrapy crawl 爬虫的名称".split())

练习
一、囧事百科数据的爬取(https://www.qiushibaike.com/text/page/1/)
笔记:
1.response是一个’scrapy.http.response.html import HtmlResponse’ 对象,可以执行’xpath’和’css’语法来提取数据
print(type(response)) # <class ‘scrapy.http.response.html.HtmlResponse’>
2.提取出来的数据,是一个’Selector’或者是一个’SelectorList’对象.如果想要获取其中的字符串,那么应该执行’getall’ 或’get’方法
3.getall方法: 获取’Selector’中的所有文本,返回的是一个列表
4.get方法: 获取’Selector’中的第一个文本,返回的是一个str类型
5.如果数据解析回来,要传给pipline处理,那么可以使用’yield’来返回,或是收集所有的item,最后统一使用return返回
6.item: 建议在items.py中定义好模型,以后就不用使用字典了
7.pipeline: 这个是专门用来保存数据的,其中有三个方法是会经常使用的
* ‘open_spider(self, spider)’: 当爬虫被打开时执行
* ‘process_item(self, item, spider)’: 当爬虫有item传过来的时候会被调用
* ‘close_spider(self, spider)’: 当爬虫关闭时会被调用
要激活pipline,应该在’settings.py’ 中,设置’ITEM_PIPELINES’. 示例如下:
ITEM_PIPELINES = {
‘scrapy200406.pipelines.Scrapy200406Pipeline’: 300, # 300代表执行优先级,越小,优先级越高
}
8.JsonItemExporter和JsonLinesItemExporter:
保存json数据的时候,可以使用这两个类,让操作变得更简单
8.1.‘JsonItemExporter’: 这个是每次把数据添加到内存中,最后统一写入到磁盘中,存储的数据符号json数据格式,但数据量大时,消耗内存
8.2.‘JsonLinesItemExporter’: 这个是每次调用’export_item’的时候就把这个item存储到硬盘中,非json数据格式,但相对遍历,耗内存少,数据相对安全

# -*- coding: utf-8 -*-# spider
import scrapy
from scrapy.http.response.html import HtmlResponse
from scrapy.selector.unified import SelectorList
from scrapyall0412.items import Scrapyall0412Itemclass Qsbk0412Spider(scrapy.Spider):name = 'qsbk0412'allowed_domains = ['qiushibaike.com']start_urls = ['https://www.qiushibaike.com/text/page/1/']base_domain = "https://www.qiushibaike.com"page = 1all_counts = 0def parse(self, response):counts = 0# SelectorListduanZiDivs = response.xpath("//div[@class='col1 old-style-col1']/div")# Selectorfor duanZiDiv in duanZiDivs:authors = duanZiDiv.xpath(".//h2/text()").get().strip()contents = duanZiDiv.xpath(".//div[@class='content']//text()").getall()comments = duanZiDiv.xpath(".//div[@class='main-text']//text()").get()counts += 1item = Scrapyall0412Item(authors=authors, contents=contents, comments=comments)yield itemprint(f'第{self.page}页,共:{counts}段')self.page += 1self.all_counts = self.all_counts+countsnext_url = response.xpath("//ul[@class='pagination']/li[last()]/a/@href").get()if not next_url:print(f'爬取{self.page-1}页, 共{self.all_counts}段')else:yield scrapy.Request(self.base_domain+next_url, callback=self.parse)
# settings.py 需要修改
ROBOTSTXT_OBEY = False  # rebot协议DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}   # 模拟浏览器访问ITEM_PIPELINES = {'scrapyall0412.pipelines.Scrapyall0412Pipeline': 1,
}  # 下载文件,数字越小,优先级越高DOWNLOAD_DELAY = 3 # 设置下载速度,以免过度消耗网站
# item.py
import scrapy
class Scrapyall0412Item(scrapy.Item):authors = scrapy.Field()contents = scrapy.Field()comments = scrapy.Field()
# pipelines.py
# -*- coding: utf-8 -*-# 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# 使用scrapy自带的导出,这种形式是先放入内存中,最后写入到磁盘,符合json格式,但数据量大时,消耗内存
from scrapy.exporters import JsonItemExporterclass Scrapyall0412Pipeline(object):def __init__(self):self.fp = open("D:\python\数据\爬虫\duanzi0407.json", 'wb')self.exporter = JsonItemExporter(self.fp, ensure_ascii=False, encoding='utf-8')self.exporter.start_exporting()def open_spider(self, spider):print("开始爬取囧事百科了...")def process_item(self, item, spider):self.exporter.export_item(item)return itemdef close_spider(self, spider):self.exporter.finish_exporting()self.fp.close()print("囧事百科爬取结束...")

scrapy框架基础学习之囧事百科相关推荐

  1. scrapy框架菜鸟学习记录

    scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...

  2. Scrapy框架的学习(一)

    1. Scrapy概述 1. 为什么要学习scrapy框架 爬虫必备的技术,面试会问相关的知识. 让我们的爬虫更快更强大.(支持异步爬虫) 2. 什么是Scrapy? 异步爬虫框架:Scrapy是一个 ...

  3. 第五章 Scrapy爬虫框架(5.1 Scrapy框架基础)

    Scrapy是一个高级Web爬虫框架,用于爬取网站并从页面中提取结构化数据.它可以用于数据挖掘.数据监控和自动化测试等多个方面.与之前讲过的Requests库和Selenium库不同,Scrapy更适 ...

  4. 11.Scrapy框架基础-使用Scrapy抓取数据并保存到mongodb

    目录 一.Scrapy安装 1.mac系统 2.windows系统 二.使用scrapy爬取数据 1.新建一个scrapy工程 2.在spiders下新建一个爬虫文件 3.提取网页数据 三.保存数据到 ...

  5. python爬虫scrapy框架基础

    我使用的软件是pychram 最近几周也一直在学习scrapy,发现知识点比较混乱,今天来总结一下.我是按照<精通python网络爬虫核心技术框架与项目实战>这本书来写的.讲的比较简洁,想 ...

  6. scrapy笔记01——爬取糗事百科段子和上传者名称

    scrapy爬虫项目及爬虫文件创建(terminal): 1.在terminal进入要创建项目的目录 2.在terminal创建工程:scrapy startproject xxxProject(工程 ...

  7. Scrapy框架基础使用

    1.流程框架 2.在命令行中输入scrapy,会有scrapy常见命令参数 在命令中输入scrapy startproject quote创建一个叫quote的项目 cd到创建好的项目目录中,然后执行 ...

  8. python学习框架图-Python学习---Python的框架基础学习

    框架基础 框架实质: 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 B/S结构的响应: import socket def handle_requ ...

  9. Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))

    在Scrapy框架中的items.py的作用   1.可以预先定义好要爬取的字段     items.py import scrapyclass TencentItem(scrapy.Item):# ...

最新文章

  1. eval解析JSON中的注意点
  2. snmp验证方式总结
  3. 10道棘手的Java面试题,看看你能答对几个?
  4. 在C盘和D盘执行php 结果不同,window_双系统电脑给C盘扩容后导致D盘Win10引导项丢失该怎么办?,为了写个经验,特意把C盘用无 - phpStudy...
  5. stm32 窗口看门狗学习(一)
  6. 腾讯牌番茄,新鲜上市!
  7. 容器化时代我们应当选择Kubernetes
  8. c语言软件电脑下载文件,求C语言头文件下载?
  9. Modbus RTU/ASCll+TCP+OPC电脑模拟+串口调试软件对接方案
  10. 服务器搬迁方案_机房搬迁的一般步骤及实施方案
  11. VMware虚拟机 centos8 解决全屏问题
  12. leetcode 413. 等差数列划分
  13. 《Tux福音》中英对照注释版
  14. 诸神之战!一文盘点中国“大模型”玩家们
  15. 学渣的刷题之旅 leetcode刷题 53.最大子序和(动态规划,贪心法)
  16. 深入分析网络编程中踩过的坑
  17. 华硕计算机硬件信息,ASUS PC Diagnostics
  18. android使用艺术字,自定义字体
  19. Excel根据出生日期和身份证使用公式计算年龄
  20. 新机器通过U盘安装WIN7原版时提示缺少驱动的解决方法

热门文章

  1. 马云:阿里巴巴要培养更多的京东并让这些企业挣钱
  2. String 类方法及调用案例
  3. Linus Torvalds:最庆幸的是 30 年后,Linux 不是一个“死”项目
  4. 短视频运营详解:抖音变现目前流行的是七种方式之一电商卖货
  5. Ubuntu 安装 uWSGI
  6. python读取 xls,xlsx,csv,doc,docx,pdf 格式的文件
  7. 韦东山freeRTOS系列教程之【第十章】软件定时器(software timer)
  8. 云原生媒体基础设施为华为云桌面护航
  9. VScode github配置及github代码管理
  10. 一,银行软件测试工作总结