scrapy框架基础学习之囧事百科
基础:
一、安装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框架基础学习之囧事百科相关推荐
- scrapy框架菜鸟学习记录
scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...
- Scrapy框架的学习(一)
1. Scrapy概述 1. 为什么要学习scrapy框架 爬虫必备的技术,面试会问相关的知识. 让我们的爬虫更快更强大.(支持异步爬虫) 2. 什么是Scrapy? 异步爬虫框架:Scrapy是一个 ...
- 第五章 Scrapy爬虫框架(5.1 Scrapy框架基础)
Scrapy是一个高级Web爬虫框架,用于爬取网站并从页面中提取结构化数据.它可以用于数据挖掘.数据监控和自动化测试等多个方面.与之前讲过的Requests库和Selenium库不同,Scrapy更适 ...
- 11.Scrapy框架基础-使用Scrapy抓取数据并保存到mongodb
目录 一.Scrapy安装 1.mac系统 2.windows系统 二.使用scrapy爬取数据 1.新建一个scrapy工程 2.在spiders下新建一个爬虫文件 3.提取网页数据 三.保存数据到 ...
- python爬虫scrapy框架基础
我使用的软件是pychram 最近几周也一直在学习scrapy,发现知识点比较混乱,今天来总结一下.我是按照<精通python网络爬虫核心技术框架与项目实战>这本书来写的.讲的比较简洁,想 ...
- scrapy笔记01——爬取糗事百科段子和上传者名称
scrapy爬虫项目及爬虫文件创建(terminal): 1.在terminal进入要创建项目的目录 2.在terminal创建工程:scrapy startproject xxxProject(工程 ...
- Scrapy框架基础使用
1.流程框架 2.在命令行中输入scrapy,会有scrapy常见命令参数 在命令中输入scrapy startproject quote创建一个叫quote的项目 cd到创建好的项目目录中,然后执行 ...
- python学习框架图-Python学习---Python的框架基础学习
框架基础 框架实质: 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 B/S结构的响应: import socket def handle_requ ...
- Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))
在Scrapy框架中的items.py的作用 1.可以预先定义好要爬取的字段 items.py import scrapyclass TencentItem(scrapy.Item):# ...
最新文章
- eval解析JSON中的注意点
- snmp验证方式总结
- 10道棘手的Java面试题,看看你能答对几个?
- 在C盘和D盘执行php 结果不同,window_双系统电脑给C盘扩容后导致D盘Win10引导项丢失该怎么办?,为了写个经验,特意把C盘用无 - phpStudy...
- stm32 窗口看门狗学习(一)
- 腾讯牌番茄,新鲜上市!
- 容器化时代我们应当选择Kubernetes
- c语言软件电脑下载文件,求C语言头文件下载?
- Modbus RTU/ASCll+TCP+OPC电脑模拟+串口调试软件对接方案
- 服务器搬迁方案_机房搬迁的一般步骤及实施方案
- VMware虚拟机 centos8 解决全屏问题
- leetcode 413. 等差数列划分
- 《Tux福音》中英对照注释版
- 诸神之战!一文盘点中国“大模型”玩家们
- 学渣的刷题之旅 leetcode刷题 53.最大子序和(动态规划,贪心法)
- 深入分析网络编程中踩过的坑
- 华硕计算机硬件信息,ASUS PC Diagnostics
- android使用艺术字,自定义字体
- Excel根据出生日期和身份证使用公式计算年龄
- 新机器通过U盘安装WIN7原版时提示缺少驱动的解决方法
热门文章
- 马云:阿里巴巴要培养更多的京东并让这些企业挣钱
- String 类方法及调用案例
- Linus Torvalds:最庆幸的是 30 年后,Linux 不是一个“死”项目
- 短视频运营详解:抖音变现目前流行的是七种方式之一电商卖货
- Ubuntu 安装 uWSGI
- python读取 xls,xlsx,csv,doc,docx,pdf 格式的文件
- 韦东山freeRTOS系列教程之【第十章】软件定时器(software timer)
- 云原生媒体基础设施为华为云桌面护航
- VScode github配置及github代码管理
- 一,银行软件测试工作总结