这里写目录标题

  • 前言
  • 0. 本章内容大概流程
  • 1. 安装Scrapy
  • 2. 工程建立
  • 3. 实现过程
    • 3.1在items.py中定义自己要抓取的数据:
    • 3.2 然后在spiders目录下编辑myspider.py那个文件:
    • 3.3 调试技巧
      • 3.3.1.我们可以通过命令进入scrapy shell:
      • 3.3.2 chrome console 调试xpath
    • 3.4 执行命令 scrapy crawl [类中name值]
  • 4. 查看结果
  • 参考资料

前言

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛
框架的力量,
用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便
scrapy架构图

Scrapy执行流程图:

crapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

0. 本章内容大概流程

抓取内容(百度贴吧:网络爬虫吧)
页面: http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8
数据:1.帖子标题;2.帖子作者;3.帖子回复数
通过观察页面html代码来帮助我们获得所需的数据内容。

1. 安装Scrapy

用conda或者pip
conda install scrapy
或者
pip install scrapy

2. 工程建立

在控制台模式下进入你要建立工程的文件夹执行如下命令创建工程:

scrapy startproject baidutieba

这里的baidutieba是工程名,框架会自动在当前目录下创建一个同名的文件夹,工程文件就在里边。

(tf1) C:\Users\**\PycharmProjects\tf1\grasp_message>scrapy startproject baidutieba
New Scrapy project 'baidutianba', using template directory 'C:\Users\**\Anaconda3\envs\tf1\lib\site-packages\scrapy\templates\project', created in:C:\Users\**\PycharmProjects\tf1\grasp_message\baidutiebaYou can start your first spider with:cd baidutianbascrapy genspider example example.com

我们先看一下目录结构:

scrapy.cfg: 项目的配置文件
baidutieba/: 该项目的python模块。之后您将在此加入代码。
baidutieba/items.py:需要提取的数据结构定义文件。
baidutieba/middlewares.py: 是和Scrapy的请求/响应处理相关联的框架。
baidutieba/pipelines.py: 用来对items里面提取的数据做进一步处理,如保存等。
baidutieba/settings.py: 项目的配置文件。
baidutieba/spiders/: 放置spider代码的目录。

3. 实现过程

3.1在items.py中定义自己要抓取的数据:

import scrapy
class DetailItem(scrapy.Item):# 抓取内容:1.帖子标题;2.帖子作者;3.帖子回复数title = scrapy.Field()author = scrapy.Field()reply = scrapy.Field()

【注】上面类中的title、author、reply就像是字典中的“键”,爬到的数据就像似字典中的“值”。

3.2 然后在spiders目录下编辑myspider.py那个文件:

import scrapy
from baidutieba.items import BaidutiebaItem
import sysclass MySpider(scrapy.Spider):"""name:scrapy唯一定位实例的属性,必须唯一allowed_domains:允许爬取的域名列表,不设置表示允许爬取所有start_urls:起始爬取列表start_requests:它就是从start_urls中读取链接,然后使用make_requests_from_url生成Request,这就意味我们可以在start_requests方法中根据我们自己的需求往start_urls中写入我们自定义的规律的链接parse:回调函数,处理response并返回处理后的数据和需要跟进的urllog:打印日志信息closed:关闭spider"""# 设置namename = "spidertieba"# 设定域名allowed_domains = ["baidu.com"]# 填写爬取地址start_urls = ["http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8",]# 编写爬取方法def parse(self, response):for line in response.xpath('//li[@class=" j_thread_list clearfix"]'):# 初始化item对象保存爬取的信息item = BaidutiebaItem()# 这部分是爬取部分,使用xpath的方式选择信息,具体方法根据网页结构而定item['title'] = line.xpath('.//div[contains(@class,"threadlist_title pull_left j_th_tit ")]/a/text()').extract()item['author'] = line.xpath('.//div[contains(@class,"threadlist_author pull_right")]//span[contains(@class,"frs-author-name-wrap")]/a/text()').extract()item['reply'] = line.xpath('.//div[contains(@class,"col2_left j_threadlist_li_left")]/span/text()').extract()yield item

【注】xpath语法可参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp

3.3 调试技巧

3.3.1.我们可以通过命令进入scrapy shell:

scrapy shell http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8

来方便的查看我们xpath代码所获得的结果,以便调试。

(tf1) C:\Users\**\PycharmProjects\tf1\grasp_message>scrapy shell http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8

3.3.2 chrome console 调试xpath

F12->$x(“//title”)
[<title>Online Tools for Software Developers (Free)</title>]


不过这样直接copy 出来的一般要做修改的。不然它只能定位一个元素。

3.4 执行命令 scrapy crawl [类中name值]

直接到你的项目目录下

(tf1) C:\Users\**\PycharmProjects\tf1\grasp_message\baidutianba>scrapy crawl spidertieba -o items.json
Traceback (most recent call last):

由于第二步中我们在类MySpider下定义了 name =“spidertieba” ,所以执行命令:scrapy crawl spidertieba -o items.json。 -o 指定文件。
这样我们就会看到此目录下生成了items.json文件

items.json文件的内容就是要爬取的内容。

或者到spiders目录下执行下面命令

scrapy runspider myspider.py -o runspider_items.json

runspider_items.json 就是爬取的内容,这个命令一般是检查你写的spider文件

4. 查看结果

简单查看一下, 创建一个pyhon 的文件print_json.py

import jsonwith open('items.json') as f:rownum = 0new_list = json.load(f)for i in new_list:rownum += 1print("""line{}:  title:{},  author:{},  reply:{}.""".format(rownum,i['title'][0],i['author'][0],i['reply'][0]))

至此,scrapy的最简单的应用就完成了。

参考资料

[1]Scrapy 框架介绍
[2] https://www.cnblogs.com/wcwnina/p/10399810.html

https://www.cnblogs.com/yangshaolun/p/10920761.html
https://blog.csdn.net/six66667/article/details/93487869

[爬虫-python] scrapy框架入门实例-百度贴吧相关推荐

  1. Python3爬虫之Scrapy框架的下载器中间件

    Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...

  2. python scrapy 框架的简单使用爬虫苏宁易购图书信息

    python scrapy 框架的简单使用&&爬虫苏宁易购图书信息 前言 第一步: 分析网页 1.1 找到要爬取的数据位置 分类信息 图书信息 价格信息 1.2 分析如何获取数据 正则 ...

  3. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  4. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  5. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

  6. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  7. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  8. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

  9. python中scrapy框架_简述python Scrapy框架

    一.Scrapy框架简介 Scrapy是用纯Python实现一个为了爬取网站数据,提取结构性数据而编写的应用框架,用途非常广泛.利用框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网 ...

最新文章

  1. varnish缓存的配置优化(redhat5.4)
  2. 数据结构二:排序(冒泡排序和选择排序)
  3. 11g RAC OCR,VOTING DISK存储全部损坏,利用自动备份,恢复OCR,VOTING DISK到新存储。...
  4. 【学习笔记】Docker - 01. Docker是啥
  5. ERROR: cuda_runtime_api.h: No such file or directory
  6. AI又破案!衢州城市大脑这回抓了一个抢劫犯
  7. android EditText获取光标位置并安插字符删除字符
  8. Apache Hive-1.2.1 Manual Patch and Compile
  9. react.js学习笔记01
  10. php通用下载方法,PHP实现打包下载文件的方法示例
  11. 苹果python执行不了,Python调用的AppleScript不使用osascript或appscript?
  12. 【光学】基于matlab圆孔菲涅尔衍射【含Matlab源码 522期】
  13. C语言绘图EasyX图形库基础(笔记)
  14. 数据库索引是什么 有什么优缺点
  15. Java、IO流——缓冲流
  16. WIN7远程桌面连接显示凭据不工作的解决方法
  17. 勋章菊的养殖方法和注意事项
  18. 按键控制输出占空比可调的PWM波
  19. Tomcat详细配置(全)
  20. arm linux驱动 知乎_学习linux驱动开发的方法?

热门文章

  1. 让IE支持HTML5
  2. unix c线程同步的三种方法:互斥量、读写锁以及条件变-xhb8413-ChinaUnix博客
  3. Sinclair 的ZX Spectrum 年逾三十
  4. hibernate的查询缓存
  5. ThreadLocal原理机制
  6. Centos7 安装samba简单教程
  7. 添加谷歌翻译到你的网站
  8. 【安卓开发】项目的目录结构分析
  9. 《高性能mysql》读书笔记一
  10. 【缓存】Redis入门