[爬虫-python] scrapy框架入门实例-百度贴吧
这里写目录标题
- 前言
- 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框架入门实例-百度贴吧相关推荐
- Python3爬虫之Scrapy框架的下载器中间件
Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...
- python scrapy 框架的简单使用爬虫苏宁易购图书信息
python scrapy 框架的简单使用&&爬虫苏宁易购图书信息 前言 第一步: 分析网页 1.1 找到要爬取的数据位置 分类信息 图书信息 价格信息 1.2 分析如何获取数据 正则 ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- Python爬虫之scrapy框架360全网图片爬取
Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...
- Python爬虫之Scrapy框架爬虫实战
Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...
- 19. python爬虫——基于scrapy框架爬取网易新闻内容
python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...
- python爬虫——用Scrapy框架爬取阳光电影的所有电影
python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...
- 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容
python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...
- python中scrapy框架_简述python Scrapy框架
一.Scrapy框架简介 Scrapy是用纯Python实现一个为了爬取网站数据,提取结构性数据而编写的应用框架,用途非常广泛.利用框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网 ...
最新文章
- varnish缓存的配置优化(redhat5.4)
- 数据结构二:排序(冒泡排序和选择排序)
- 11g RAC OCR,VOTING DISK存储全部损坏,利用自动备份,恢复OCR,VOTING DISK到新存储。...
- 【学习笔记】Docker - 01. Docker是啥
- ERROR: cuda_runtime_api.h: No such file or directory
- AI又破案!衢州城市大脑这回抓了一个抢劫犯
- android EditText获取光标位置并安插字符删除字符
- Apache Hive-1.2.1 Manual Patch and Compile
- react.js学习笔记01
- php通用下载方法,PHP实现打包下载文件的方法示例
- 苹果python执行不了,Python调用的AppleScript不使用osascript或appscript?
- 【光学】基于matlab圆孔菲涅尔衍射【含Matlab源码 522期】
- C语言绘图EasyX图形库基础(笔记)
- 数据库索引是什么 有什么优缺点
- Java、IO流——缓冲流
- WIN7远程桌面连接显示凭据不工作的解决方法
- 勋章菊的养殖方法和注意事项
- 按键控制输出占空比可调的PWM波
- Tomcat详细配置(全)
- arm linux驱动 知乎_学习linux驱动开发的方法?