小爬爬5:scrapy介绍2
1.scrapy:爬虫框架
-框架:集成了很多功能且具有很强通用性的一个项目模板
-如何学习框架:(重点:知道有哪些模块,会用就行)
-学习框架的功能模板的具体使用.
功能:(1)异步爬取(自带buffer)
(2)高性能的数据解析+持久化存储操作.
2.scrapy环境安装:
Linux:
pip3 install scrapy
Windows:
a. pip3 install wheel
b. 下载地址twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
#注意:这一步是需要参考python版本cp36或者cp35
d. pip3 install pywin32
e. pip3 install scrapy
3.scrapy数据解析
scrapy使用流程
(1)首先,可以切换想要创建的目录,直接在下面的Terminal中创建一个工程,切换回上一层目录.

(2)创建一个工程命令:scrapy startproject scrapy1

(3)看一下目录结构,我们先了解spiders文件夹和settings.py文件

(4)settings.py里边,我们需要进行相关的属性配置
spiders文件夹下面,我们需要新建"爬虫文件",
我们再cd到我们刚才新建的工程内: cd scrapy1
创建爬虫文件:scrapy genspider 爬虫文件名 起始url
scrapy genspider first www.xxx.com
(5)下面,我们看一下穿件的爬虫文件first.py:

爬虫程序first.py,详细描述
# -*- coding: utf- -*-
import scrapy
class FirstSpider(scrapy.Spider):
name = 'first'
#name爬虫文件的名称,爬虫文件的唯一标识,有多个爬虫文件的时候会用到 # allowed_domains = ['www.xxx.com']
# allowed_domains = ['www.baidu.com']
#被允许的域名
#如果修改成:www.baidu.com这个被允许的域名,那么只可以访问百度下的相关地址
#因此我们知道这个allowed_domains是用来做限定的,这个可以注释掉 #起始的url列表(可以放置多个url)
#多个(都会被scrapy进行自动的请求发送)
start_urls = ['https://www.baidu.com/','https://www.sogou.com/'] #用来解析数据的parse函数,现在列表中有两个url,这两个都会被请求发送
#因此会调用两次
def parse(self, response): #response是url请求之后得到的响应对象
print(response)
下面执行爬虫程序(见下图):scrapy crawl first
我们看起来是仅仅执行这一个爬虫文件,但其实是执行了这整个工程
如果仅仅执行这一个爬虫文件是没有任何意义的.

运行:
得到的内容,很像是一些日志信息.

(6)我们可以看到其中有一条是"遵循robotstxt_obey"遵循robots协议,这也就意味着我们爬取不到任何的数据,
因此我们应该设置,不遵从robots协议,具体在settings.py里边设置,
ROBOTSTXT_OBEY = False

(7)下面我们再在设置里,写"遵循UA伪装"

(8)这个时候,我们再次运行这个爬虫程序:

得到下面的结果:

(9)start_urls列表里边的url会自动发送请求的,不管有多少个都会发生请求.
parse这个函数就会得到response响应的响应
(10)我们看到的信息可能会干扰我们看信息,我们可以设置不看日志
这个时候,我们可以看到只要结果数据

2.爬取糗事百科中的作者名称
(1)回退到上一层:
创建一个项目:scrapy startproject qiubaiPro

(2)注意:我们创建爬虫文件一定要进入创建的工程内

(3)先实现UA伪装和robots协议改写

(4)下面,我们再实现爬虫文件的编写,先找到一个总的id="content-left",进行id定位

一步步,推导出作者的这个名称:

爬虫程序:qiubai.py
# -*- coding: utf- -*-
import scrapy class QiubaiSpider(scrapy.Spider):
name = 'qiubai'
# allowed_domains = ['www.xxx.com']
#起始url
start_urls = ['https://www.qiushibaike.com/text/'] def parse(self, response):
div_list=response.xpath('//*[@id="content-left"]/div')
#拿到响应数据,进行xpath数据解析
#注意,这里的xpath和etree里边的xpath是不同的
for div in div_list:
author=div.xpath('./div[1]/a[2]/h2/text()')[]
content=div.xpath('.a/div/span//text()')
print(author,content)
break
#作者是字符串,
#内容是列表(内容是列表对应的字符串数据)
运行:下面的内容:

出不来结果,原因是xpath出现的问题,
content=div.xpath('./a/div/span//text()')
a的前边少了一个/
我们可以通过检查,看下日志,检查下错误出现在哪个地方:scrapy crawl qiubai(爬虫的文件名)
(5)下面是重新启动程序之后重新打开的命令:



我看看到得到的结果
下面我们加上extract()进行处理取数据
如何取出列表中很多条的数据?

Terminal中 cls命令是将内容推到上边
下面我们改变一下内容

我们得到下面的结果:

当我们只知道列表中有一个数据用下边的方法extract_first()
extract() 列表中有多条数据的时候,我们需要将内容拼接起来.

运行.这个时候我们可以拿到作者和笑话,还有评论人的名称

这个时候,我们将上边的代码中的break去掉,再次运行

运行,得到全部的作者和笑话
小爬爬5:scrapy介绍2的更多相关文章
- 小爬爬5:scrapy介绍3持久化存储
一.两种持久化存储的方式 1.基于终端指令的吃持久化存储: 特点:终端指令的持久化存储,只可以将parse方法的返回值存储到磁盘文件 因此我们需要将上一篇文章中的author和content作为返回值 ...
- 小爬爬6.scrapy回顾和手动请求发送
1.数据结构回顾 #栈def push(self,item) def pop(self) #队列 def enqueue(self,item) def dequeue(self) #列表 def ad ...
- 微信小程序管理后台介绍
微信小程序的管理后台,每次进入都需要扫码,还是特别不爽,现在微信小程序还没正式发布,很多人都还没看到管理后台,这里抢先发布出来 ------------------------------------ ...
- 微信小程序-06-详解介绍.js 逻辑层文件-注册页面
上一篇介绍的是 app.js 逻辑层文件中注册程序,对应的每个分页面都会有的 js 文件中 page() 函数注册页面 微信小程序-06-详解介绍.js 逻辑层文件-注册页面 宝典官方文档: http ...
- 微信小程序-05-详解介绍.js 逻辑层文件
上一篇介绍了关于.json 的配置文件,本篇介绍关于.js 逻辑层文件 微信小程序-05-详解介绍.js 逻辑层文件 宝典官方文档: https://developers.weixin.qq.com/ ...
- 微信小程序-04-详解介绍.json 配置文件
致我自己:小程序开发不是简单一两天的事,一两天只能算是了解,有时候看多了会烦,感觉很熟悉了,其实只是对表面进行了解,对编程却知之甚少,小程序开发不是简单的改模板,一两天很多部分改模板可能都做不到,坚持 ...
- ELK之开心小爬爬
1.开心小爬爬 在爬取之前需要先安装requests模块和BeautifulSoup这两个模块 ''' https://www.autohome.com.cn/all/ 爬取图片和链接 写入数据库里边 ...
- 小爬爬6: 网易新闻scrapy+selenium的爬取
1.https://news.163.com/ 国内国际,军事航空,无人机都是动态加载的,先不管其他我们最后再搞中间件 2. 我们可以查看到"国内"等板块的位置 新建一个项目,创建 ...
- 小爬爬1:开篇&&简单介绍启动
1.第一阶段的内容 2.学习的方法? 思考,总结,重复 3.长大了意味着什么?家庭的责任,真的很重 4.数据分析&&数据清洗 numpy&&pandas&&am ...
随机推荐
- web api中允许跨域访问
①添加owin的引用 ②添加owin.Cors的引用 ③在WebApiConfig中添加 config.EnableCors(new EnableCorsAttribute("*" ...
- ajax 向后台数组解决;
$.ajax({ traditional: true//这个设置为true,data:{"steps":["qwe","asd"," ...
- T2485 汉诺塔升级版(普及)(递归)
https://www.luogu.org/problem/show?pid=T2485 题目背景 汉诺塔升级了 题目描述 现在我们有N个圆盘和N个柱子,每个圆盘大小都不一样,大的圆盘不能放在小的圆盘 ...
- Leetcode400Nth Digit第N个数字
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字. 注意: n 是正数且在32为整形范围内 ( n < 231). 示例 1: ...
- Sublime keymap 个性修改
[ // 保存全部 {"keys": ["ctrl+alt+s"], "command": "save_all"}, / ...
- 「LOJ10104」「一本通 3.6 练习 5」Blockade-Tarjan
首先%%%lydrainbowcat 这个题唔,真是Tarjan好题(?) 不知道为啥也叫BLO,首字母? <题面> 搜索树真真的棒! 仔细看看,知道是Tarjan了,切掉一个点有不通的对 ...
- Weekly 10 小结
A题 模拟 T = int(input()) while T: T -= 1 s = raw_input() n = len(s) res, pre = 0, 0 for i in xrange(1, ...
- spring cloud深入学习(三)-----服务消费
在上一篇博文中简单实现了eureka-server以及eureka-provider,后面会实现eureka-cosumer,现在针对eureka做进一步的详解. 微服务整体架构 文字再美也没有图片直 ...
- angular 项目迭代+记录采坑
年中的时候 正在做的项目来了新的领导 给我们的NG4项目来了一次大整顿. 我们公司项目基本都是敏捷开发--> 开发出一个成熟的shared目录(里面有所有的公用组件 公用服务 公用工具类) 然后 ...
- spring的基于xml的AOP配置案例和切入点表达式的一些写法
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...