一文读懂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中几种操作字符串的方法的介绍
Apr 09 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
Python实现word2Vec model过程解析
Dec 16 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
Python中Selenium模块的使用详解
Oct 09 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python ldap实现登录实例代码
2016/09/30 Python
python 对象和json互相转换方法
2018/03/22 Python
Python使用gRPC传输协议教程
2018/10/16 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
翻译专业应届生求职信
2013/11/23 职场文书
税务干部鉴定材料
2014/02/11 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书