scrapy爬虫框架,爬取某网站小游戏案例
scrapy介绍
名词介绍:
- 引擎(engine)
scrapy的核心,负责模块之间的衔接 - 调度器(scheduler)
存放我们要爬取的URL地址,可以看成一个URL容器,它决定着我们下一步要去爬取哪个URL - 爬虫(spider)
主程序吧,大部分代码在这里写,主要负责解析response中的数据解析,拿到我们想要的数据 - 管道(pipeline)
数据存放的地方,管道可以有多个,按照优先级来,数越小,优先级越高 - 下载器(download)
负责发送request请求,将结果直接打包成可以解析的数据,交给爬虫
scrapy工作流程:
- 爬虫(spider)从其实url构造成requests对象传递给调度器
- 引擎(engine)从调度器中获取到request对象交给下载器
- 由下载器(downloader)获取到页面源代码,在交给引擎
- 引擎将获取到的原码交给spider ,spider对数据进行解析(parse)并返还给引擎
使用方法:
1.在终端里移动到项目所在地址
scrapy startproject 【项目名字】 # 使用scrapy创建项目
2.cd到刚才的项目里面,创建目标
scrapy genspider 【名字】【目标URL】
项目实战
主程序里面:
import scrapy
class Game4399Spider(scrapy.Spider):
name = "game4399"
allowed_domains = ["4399.com"]
start_urls = ["http://4399.com/flash"]
def parse(self, response):
# print(response.text) # 页面源代码
# response.json(), response.cs
# 需要用extract单独提取内容
# 一次性提取
# name = response.xpath('//*[@id="skinbody"]/div[8]/ul/li/a/b/text()').extract()
# print(name)
# 分块提取
lis = response.xpath('//ul[@class="n-game cf"]/li')
for li in lis:
# 使用extract_first()提取第一项,没有不取,代替[0],防止报错
name = li.xpath('./a/b/text()').extract_first()
link = 'http://www.4399.com' li.xpath('./a/@href').extract_first()
# print(name)
# 因为列表比较耗内存,所以这里转成字典
dic = {
"name": name,
"link": link,
}
# 用yield将数据传递给管道pipeline
yield dic # 如果返回的是数据,直接可以认为给了管道pipeline
setting里面把不需要的日志取消显示,只显示错误信息就够用了,把这行加上去
# 日志级别:DEBUG, INFO, WARNING, CRITICAL , 依次递增
LOG_LEVEL = 'ERROR'
还要在里面打开项目管道,scrapy默认是关闭的,找到这几行代码,取消注释即可
ITEM_PIPELINES = {
"game.pipelines.GamePipeline": 300,
# key:管道的路径 value:管道的优先级,越小优先级越高,管道可有多个,mysql,MangoDB等
# 创建一个新的管道
"game.pipelines.NewPipeline": 200,
}
pipelines里面的代码:
# 管道默认是不生效的,需要去设置中打开
class GamePipeline: # 类名可以自定义
def process_item(self, item, spider): # 处理数据的专用方法,不可随意更改,item:数据,spader:爬虫
# print(item)
# print(spider.name)
return item
class NewPipeline: # 使用自定义的管道,优先级200
def process_item(self, item, spider):
item['love'] = 'OK'
return item
最后执行scrapy crawl [项目名字]
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfhkfe
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01