一文读懂python Scrapy爬虫框架


Posted in Python onFebruary 24, 2021

Scrapy是什么?

先看官网上的说明,http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

Scrapy是一个非常好用的爬虫框架,它不仅提供了一些开箱即用的基础组件,还提供了强大的自定义功能。

# Scrapy 安装

Scrapy 官网:https://scrapy.org/

各位同学的电脑环境应该和小编的相差不远(如果是使用 win10 的话) 安装过程需要10分钟左右

安装命令:

pip install scrapy

由于 Scrapy 依赖了大量的第三方的包,所以在执行上面的命令后并不会马上就下载 Scrapy ,而是会先不断的下载第三方包,包括并不限于以下几种:

  • pyOpenSSL:Python 用于支持 SSL(Security Socket Layer)的包。
  • cryptography:Python 用于加密的库。
  • CFFI:Python 用于调用 C 的接口库。
  • zope.interface:为 Python 缺少接口而提供扩展的库。
  • lxml:一个处理 XML、HTML 文档的库,比 Python 内置的 xml 模块更好用。
  • cssselect:Python 用于处理 CSS 选择器的扩展包。
  • Twisted:为 Python 提供的基于事件驱动的网络引擎包。
  • ……

如果安装不成功多试两次 或者 执行pip install --upgrade pip 后再执行 pip install scrapy

等待命令执行完成后,直接输入 scrapy 进行验证。

C:\Users\Administrator>scrapy
Scrapy 2.4.0 - no active project
Available commands:
bench   Run quick benchmark test
...

版本号可能会有差别,不用太在意

如果能正常出现以上内容,说明我们已经安装成功了。

理论上 Scrapy 安装出现各种问题才算正常情况

三、Scrapy创建项目

Scrapy 提供了一个命令来创建项目 scrapy 命令,在命令行上运行:

scrapy startproject jianshu

我们创建一个项目jianshu用来爬取简书首页热门文章的所有信息。

jianshu/
 scrapy.cfg
 jianshu/
  __init__.py
  items.py
  pipelines.py
  settings.py
  spiders/
   __init__.py
   ...

spiders文件夹下就是你要实现爬虫功能(具体如何爬取数据的代码),爬虫的核心。在spiders文件夹下自己创建一个spider,用于爬取简书首页热门文章。

scrapy.cfg是项目的配置文件。

settings.py用于设置请求的参数,使用代理,爬取数据后文件保存等。

items.py 自己预计需要爬取的内容

middlewares.py自定义中间件的文件

pipelines.py 管道,保持数据

项目的目录就用网图来展示一下吧

一文读懂python Scrapy爬虫框架

image Scrapy爬取简书首页热门文章

cd到Jianshu项目中,生成一个爬虫:

scrapy genspider jianshublog www.jianshu.com

这种方式生成的是常规爬虫

1)新建jianshuSpider

import scrapy
class JianshublogSpider(scrapy.Spider):
 name = 'jianshublog'
 allowed_domains = ['www.jianshu.com']
 start_urls = ['http://www.jianshu.com/']
 
 def parse(self, response):
  pass

可以看到,这个类里面有三个属性 nameallowed_domainsstart_urls 和一个parse()方法。

name,它是每个项目唯一的名字,用来区分不同的 Spider。

allowed_domains,它是允许爬取的域名,如果初始或后续的请求链接不是这个域名下的,则请求链接会被过滤掉。
start_urls,它包含了 Spider 在启动时爬取的 url 列表,初始请求是由它来定义的。

parse,它是 Spider 的一个方法。默认情况下,被调用时 start_urls 里面的链接构成的请求完成下载执行后,返回的响应就会作为唯一的参数传递给这个函数。该方法负责解析返回的响应、提取数据或者进一步生成要处理的请求。

到这里我们就清楚了,parse() 方法中的 response 是前面的 start_urls中链接的爬取结果,所以在 parse() 方法中,我们可以直接对爬取的结果进行解析。

修改USER_AGENT

打开settings.py 添加 UA 头信息

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36'

修改`parse`方法解析网页

我们打开简书首页  右键检查(ctrl+shift+I)发现所有的博客头条都放在类名.note-list .content 的div 节点里面

一文读懂python Scrapy爬虫框架

修改jianshublog.py代码如下

一文读懂python Scrapy爬虫框架

jianshublog.py

import scrapy
 
class JianshublogSpider(scrapy.Spider):
 name = 'jianshublog'
 allowed_domains = ['www.jianshu.com']
 start_urls = ['http://www.jianshu.com/']
 
 def parse(self, response):
  blogs = response.css('.note-list .content')
  # 获取博客列表
  for blog in blogs: # 遍历博客列表
   title = blog.css('.title::text').extract_first() # 提取标题
   link = blog.css('.title::attr(href)').extract_first() # 提取链接
   nickname = blog.css('.nickname::text').extract_first() # 提作者
   print("标题:",title) # 打印标题
   # print("链接:", link)
   # print("作者:", nickname)

最后别忘了执行爬虫命令

scrapy crawl jianshublog

整个项目就完成啦

下一讲我们把文章数据爬取出来,存储在csv文件里面

到此这篇关于一文读懂python Scrapy爬虫框架的文章就介绍到这了,更多相关python Scrapy爬虫框架内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python实现拉钩网上的FizzBuzzWhizz问题示例
May 05 Python
Python写的Socks5协议代理服务器
Aug 06 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
使用python的pyplot绘制函数实例
Feb 13 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Python函数对象与闭包函数
Apr 13 Python
Django如何重置migration的几种情景
Feb 24 #Python
Django中的DateTimeField和DateField实现
Feb 24 #Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 #Python
学点简单的Django之第一个Django程序的实现
Feb 24 #Python
python单例模式的应用场景实例讲解
Feb 24 #Python
python编写扎金花小程序的实例代码
Feb 23 #Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 #Python
You might like
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
PHP开发过程中常用函数收藏
2009/12/14 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
vue实现文件上传功能
2018/08/13 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
详解Vite的新体验
2021/02/22 Javascript
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python pandas修改列属性的方法详解
2018/06/09 Python
Python日志器使用方法及原理解析
2020/09/27 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
新学期家长寄语2016
2015/12/03 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书