scarpy基础
1. 创建项目
scrapy startproject 项目名称
2. 进入项目
cd 项目名称
3. 创建爬虫
scrapy genspider 名字 域名
4. 可能需要start_urls,修改成你要抓取的那个页面
进入spiders里面,会看见一个按你创建名字的python文件
例如: scrapy genspider xiao www.4399.com
那么在spiders里面就有一个xiao.py
然后start_urls就是放其实页面url
5. 对数据进行解析,在spider里面的parse(response)方法中进行解析
def parse(self, response): # 该方法默认是用来处理解析的
response.text# 拿到页面源代码
response.xpath()
response.css()
解析数据的时候,需要注意,默认xpath()返回的是selector对象,
想要拿到数据必须使用extrace() 提取数据
extract() 返回列表
extract_first() 返回一个数据
yield 返回数据 -> 把数据交给pipeline来进行持久化存储
6.在pipeline中完成数据的存储
# 记住:管道默认是不生效的,需要取settings里面取开启管道
class 类名:
# 处理数据的方法,item:数据,spider:爬虫
def process_item(self, item, spider):
item:数据
spider:爬虫
return item #必须要return东西,否则下一个管道收不到数据
7.设置settings.py文件将pipeline进行生效设置
ITEM_PIPELINES = {
# key就是管道的路径
# value就是管道的优先级
'管道的路径': 优先级, 优先级级越低,优先级越高
例:"game.pipelines.GamePipeline": 300,
}
# 在settings.py里面添一条下面的语句,那个警告以下的日志就不会出现
LOG_LEVEL = 'WARNING' # 警告及警告以上才出现
8.运行爬虫
scrapy crawl 爬虫的名字
例: scrapy crawl xiao
import scrapy
class XiaoSpider(scrapy.Spider):
name = "xiao" # 爬虫名字
allowed_domains = ["www.4399.com"] # 允许的域名
start_urls = ["https://www.4399.com/"] # 起始页面url
def parse(self, response): # 该方法默认是用来处理解析的
# 本来是用来解析的
# print(response)
# 拿到页面源代码
# print(response.text)
# 获取页面所有中游戏名字
# txt = response.xpath('//*[@id="skinbody"]/div[10]/div[1]/div[1]/ul/li/a/text()').extract() # 提取内容
# print(txt)
# 分块提取数据
li_list = response.xpath('//*[@id="skinbody"]/div[10]/div[1]/div[1]/ul/li')
for li in li_list:
# 如果在后面添[0]取出来成字符串的话,如果该元素是空的就会报错
# name = li.xpath('./a/text()').extract()[0]
# extract_first提取一项内容,如果没有,返回None
name = li.xpath('./a/text()').extract_first()
# print(name)
# break # 测试
dic = {
'name':name
}
# 需要用yield将数据传递给管道
yield dic # 如果返回的是数据,直接可以认为是给了管道pipelines
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
# 记住:管道默认是不生效的,需要取settings里面取开启管道
class GamePipeline:
# 处理数据的方法,item:数据,spider爬虫
def process_item(self, item, spider):
print(item)
print(spider.name)
return item
class NewPipeline:
# 处理数据的方法,item:数据,spider爬虫
def process_item(self, item, spider):
item['love'] = '陶喆'
return item
settings.py
# Scrapy settings for game project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://docs.scrapy.org/en/latest/topics/settings.html
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
BOT_NAME = "game"
SPIDER_MODULES = ["game.spiders"]
NEWSPIDER_MODULE = "game.spiders"
LOG_LEVEL = 'WARNING' # 警告及警告以上才出现
# Crawl responsibly by identifying yourself (and your website) on the user-agent
# USER_AGENT = "game (+http://www.yourdomain.com)"
# Obey robots.txt rules
ROBOTSTXT_OBEY = True
# Configure maximum concurrent requests performed by Scrapy (default: 16)
# CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
# DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
# CONCURRENT_REQUESTS_PER_DOMAIN = 16
# CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
# COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
# TELNETCONSOLE_ENABLED = False
# Override the default request headers:
# DEFAULT_REQUEST_HEADERS = {
# "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
# "Accept-Language": "en",
# }
# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
# SPIDER_MIDDLEWARES = {
# "game.middlewares.GameSpiderMiddleware": 543,
# }
# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
# "game.middlewares.GameDownloaderMiddleware": 543,
# }
# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
# EXTENSIONS = {
# "scrapy.extensions.telnet.TelnetConsole": None,
# }
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
# key就是管道的路径
# value就是管道的优先级
"game.pipelines.GamePipeline": 300,
"game.pipelines.NewPipeline": 299, # 数字越低优先级越高
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
# AUTOTHROTTLE_ENABLED = True
# The initial download delay
# AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
# AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
# AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
# HTTPCACHE_ENABLED = True
# HTTPCACHE_EXPIRATION_SECS = 0
# HTTPCACHE_DIR = "httpcache"
# HTTPCACHE_IGNORE_HTTP_CODES = []
# HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
# Set settings whose default value is deprecated to a future-proof value
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"
scarpy基础的更多相关文章
- Python爬虫-01:爬虫的概念及分类
目录 # 1. 为什么要爬虫? 2. 什么是爬虫? 3. 爬虫如何抓取网页数据? # 4. Python爬虫的优势? 5. 学习路线 6. 爬虫的分类 6.1 通用爬虫: 6.2 聚焦爬虫: # 1. ...
- scrapy 基础
安装略过 创建一个项目 scrapy startproject MySpider #或者创建时存储日志scrapy startproject --logfile='../logf.log' MySpi ...
- Scrapy爬虫框架 基础
1< scrapy的安装 命令行安装 pip install scrapy <常见错误是缺少 wim32api 安装win32api pip install pywin32 <还有就 ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
随机推荐
- Oracle【ORA-00600 internal error code arguments [2662]】恢复一例
背景 1.数据库版本:11.2.0.4 2.未开启归档 3.没有备份:无RMAN备份.无DUMP备份 4.数据库redo log全部删除. 解决思路: Oracle 的隐含参数: _allow_res ...
- 【Oracle】Oracle数据库多实例安装
需求:因为需要从RAC的多实例迁移至单虚拟机的多实例.因此,简要概述一下,如何安装数据库的多实例. 不管是Oracle 11g还是10g的多实例,其基本思路都是一致的. 1.调用dbca 在root账 ...
- Docker基础 ubuntu安装docker
目录 如何在Linux深度系统deepin下安装docker 介绍 安装docker 在ubuntu的docker中运行ubuntu 在ubuntu的docker中运行centos 卸载docker ...
- jquery中.html(),.text()和.val()的差异总结
.html(),.text(),.val()三种方法都是用来读取选定元素的内容: .html()是用来读取元素的html内容(包括html标签): .text()用来读取元素的纯文本内容,包括其后代元 ...
- vue3中404路由匹配规则
{ path: '/:pathMatch(.)', component: () => import('@/views/error/404.vue') },
- uniapp登录板块封装(旧接口getUserInfo)
点击查看代码 // 授权并获取用户信息 const authorizeAndGetUserInfo = (loginRes) => { uni.getUserInfo({ success(res ...
- WebGL:使用着色器进行几何造型
前言 本文将介绍如何使用着色器来进行几何造型,说到几何图形大家一定都不陌生,比如说三角形.圆形,接触过WebGL基础使用的小伙伴一定都知道怎么去在画布上绘制一个三角形,只要传入三个顶点坐标,并选择绘图 ...
- 利用FileReader进行二进制文件传输
一.读取本地二进制文件,上传(数据库文件为例) 二进制文件读取的时候应当直接读取成字节数组,以免在调试时造成误解.比如数据库文件里面的有些字段是utf8编码,因此,采用utf-8编码读出来也能看到一些 ...
- C#开源实用的工具类库,集成超过1000多种扩展方法
前言 今天大姚给大家分享一个C#开源(MIT License).免费.实用且强大的工具类库,集成超过1000多种扩展方法增强 .NET Framework 和 .NET Core的使用效率:Z.Ext ...
- Android应用程序启动流程浅析-(三万字长文慎点&Android14)
在Android桌面Launcher源码浅析中介绍了Android的桌面程序Launcher是如何响应用户点击事件并启动App的,这篇文章继续介绍App在Android系统层是的启动流程. 一.启动流 ...