• 首先介绍一下scrapy。

    • Scrapy一个开源和协作的框架,是为了页面抓取所设计的,使用它可以快速、简单、可扩展(通过中间件)的方式从网站中提取所需的数据。
    • 工作流程如下
      • Scrapy Engine是scrapy的核心,负责数据流的管理。Spiders(爬虫)发出Requests请求,请求经由Scrapy Engine传递给Scheduler(调度器),Scheduler通过Downloader Middlewares(下载器中间件)传递Requests给Downloader(下载器),Downloader根据Requests从网络上下载数据,并给出结果Responses(这是爬取内容的结果),随后Downloader通过Spider Middlewares(爬虫中间件)将Response交给Spiders分析,Spiders分析得到Items交给Item Pipeline(管道)。
      • 这里的Spider和Item Pipeline根据用户需求自行编写。(中间件也可以自行编写)
      • 具体返回值设计可以参照官方中文文档:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

  • 图片来自官方参考文档。
  • 本次测试为爬取mcbbs整合包模块的帖子列表,并且获取每个帖子的链接,访问该链接页面并且获得主要内容标签内的文本,以“标题  : 主要mod”存入txt文本文件。
  • 创建项目,mcbbs。

  • conda activate spider :激活一个python虚拟环境叫做spider,且spider这个虚拟环境目录下已经安装了scrapy。如何创建虚拟解释器环境,并且安装scrapy参见我的博客 :https://blog.csdn.net/zhouchen1998/article/details/81382006
  • 创建成功后在对应位置生成项目文件夹,用pycharm打开,文件结构如下:

  • 其中PackSpider为自定义爬虫。
  • 1.首先,设置settings.py。
    • 设置延时之类的,生成的文件里都有但是注释了,改过来就OK。
BOT_NAME = 'mcbbs'SPIDER_MODULES = ['mcbbs.spiders']
NEWSPIDER_MODULE = 'mcbbs.spiders'
ITEM_PIPELINES = {'mcbbs.pipelines.McbbsPipeline': 1,
}
STORE = 'D:\get.txt'ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 1
  • 2.完成Item书写。

    • 因为我要保存帖子名称和主要mod内容,名称获取页面元素就ok,但是主要mod则是通过获得元素的链接进入帖子获取主要内容,并且保存,所以item设计如下。
    • items.py

import scrapyclass McbbsItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()link_url = scrapy.Field()dir_name = scrapy.Field()dir_content = scrapy.Field()
  • 3.写你的爬虫PackSpider.py(这里看清结构和继承)

    • 自定义爬虫必须继承Spider
    • 因为项目简单,不详细注释了。
import scrapy
from scrapy import Selector
from mcbbs.items import McbbsItem
'''
爬取mcbbs整合包区块的整合包贴名,并且通过xpath或者re(正则表达式)进入相关链接爬取所含主要mod'''class PackSpider(scrapy.Spider):name = 'mc_pack'def __init__(self):# 帖子域名self.server_link = 'http://www.mcbbs.net'self.allowed_domains = ['www.mcbbs.net']str1 = 'http://www.mcbbs.net/forum.php?mod=forumdisplay&fid=170&page='# 产生前十列的所有链接self.start_urls = [(str1 + str(item)) for item in range(2, 51)]def start_requests(self):for item in self.start_urls:yield scrapy.Request(url=item, callback=self.parse1)# 解析内容获得每个帖子的地址def parse1(self, response):hxs = Selector(response)items = []# 获取链接urls = hxs.xpath(r'//a[@onclick="atarget(this)"]/@href').extract()# 获取帖子名称dir_names = hxs.xpath(r'//a[@onclick="atarget(this)"]/text()').extract()for index in range(len(urls)):item = McbbsItem()item["link_url"] = self.server_link + "/"+ urls[index]item["dir_name"] = dir_names[index]items.append(item)# 根据每个帖子链接,发送Request请求,传递itemfor item in items:yield scrapy.Request(url=item["link_url"], meta={"item": item}, callback=self.parse2)def parse2(self, response):item = response.meta['item']hxs = Selector(response)context = hxs.xpath(r'//tbody/tr[last()-2]/td/text()').extract()item["dir_content"] = contextyield item
  • 4.完成pipelines.py,数据落地。
# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
from mcbbs import settings
from scrapy import Request
import requests
import osclass McbbsPipeline(object):def process_item(self, item, spider):with open(settings.STORE, 'a') as f:f.write(item['dir_name']+"    :     ")f.write(str(item['dir_content'])+"\n")return item
  • 5.注意,如果你用的pycharm来项目编辑,那么必须给一个入口模块。同时scrapy是异步的爬取顺序不是输入顺序。

    • main.py
    • 其中mc_pack就是spider里面定义的name。
from scrapy import cmdline
if __name__ == '__main__':cmdline.execute('scrapy crawl mc_pack'.split())
  •  运行结果

python爬虫-初步使用Scrapy分布式爬虫(爬取mcbbs整合包保存名称及主要mod),大爱MC相关推荐

  1. 爬虫实战|从笔趣阁爬取书籍并简单保存

    最近在看崔庆才那本经典的爬虫开发书籍,之前虽然看过一点视频,但是与书籍相比还是书籍更加成体系,让我对知识有一个宏观的把控.目前已经看了前四章,了解了一些基础知识和如何解析数据的方法,但是对于数据的保存 ...

  2. Python爬虫之运用scrapy框架将爬取的内容存入文件和数据库

    文章目录 前言 源码 爬虫文件(test1) pipelines.py setting.py 运行结果 前言 主要运用了scrapy持久化存储操作,下面主要展示spider和管道文件及一些设置. 源码 ...

  3. python爬虫框架之Scrapy之分页爬取电影天堂

    首先创建项目 进入项目文件夹下用cmd scrapy startproject dytt 打开项目创建app scrapy genspider dy dytt8.net 修改settings.py U ...

  4. Python数据爬虫学习笔记(3)爬取豆瓣阅读的出版社名称数据

    需求:写一个Python程序,实现获取豆瓣阅读网页上的所有出版社名称,并储存在指定路径的txt文件中,如下: 准备:观察该网页的源代码,注意到每个出版社名称都由固定格式的div所包裹,如下: 编写代码 ...

  5. Scrapy分布式爬虫打造搜索引擎 - (三)知乎网问题和答案爬取

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 推荐前往我的个人博客进行阅读:http://blog.mtiany ...

  6. Python爬虫大战、 Scrapy分布式原理以及分布式部署

    Python爬虫大战 爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序 反爬虫:使用技术手段防止爬虫程序爬取数据 ...

  7. python分布式爬虫框架_python之简单Scrapy分布式爬虫的实现

    分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度. 在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queu ...

  8. 三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题 转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182813.html

  9. python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

    原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...

最新文章

  1. java图片16帧动画_Java实现帧动画的实例代码
  2. Javascript 面向对象编程定义接口的一种方法
  3. 今日arXiv精选 | 14 篇 ICCV 2021 最新论文
  4. 基于数据空间的电子病历数据融合与应用平台
  5. 使用redis批量生成主键(订单)Id
  6. 变量“componentresourcemanager”未声明或从未赋值_频繁出现在面试题中,却容易被人遗忘:变量、基本数据类型...
  7. 我的5年Python7年R,述说她们的差异在哪里?
  8. Linux驱动开发(十三)---USB驱动HID开发学习(鼠标)
  9. 情感理论-emotion theory
  10. 你的下一台电脑何必是电脑,探索不一样的远程操作
  11. Java生成二维码图片并打包下载
  12. Python画熊头像
  13. 饥荒服务器访问令牌文档,《饥荒》联机版构建专属服务器方法步骤图文详解
  14. linux系统单网卡绑定双IP的方法
  15. surfaceView全屏和退出全屏
  16. 【Vue知识点】——Vue2和Vue3的数据劫持
  17. AMD Radeon GPU Injector tool | 老旧 AMD 显卡驱动工具
  18. centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides */vim 第十节课...
  19. 使用Docker构建服务(6)
  20. 不运动也能增肌???打一针冬眠黑熊的血清就行

热门文章

  1. 设计模式在Netty 中的应用-单例模式源码举例
  2. reportInterruptAfterWait
  3. 函数式接口作为方法的返回值类型案例
  4. 数据库-优化-数据库系统配置优化-配置文件优化
  5. mysql存储数据到cephfs_采用cephfs实现Elasticsearch数据持久化
  6. 小学数学加减法测试软件,小学生数学加减测试题
  7. 在Linux系统终端利用ggc,大学计算机:Linux下C编程.pdf
  8. Linux---输入与输出函数总结
  9. OSPF 多区域配置
  10. 使用注解实现ssh整合