一文读懂python Scrapy爬虫框架

作者:曾亲桂林 时间:2021-01-31 10:08:31 

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文件里面

来源:https://blog.csdn.net/bigzql/article/details/112130951

标签:python,Scrapy爬虫,框架
0
投稿

猜你喜欢

  • asp如何设定程序的执行次数?

    2010-05-18 18:31:00
  • asp清空站点缓存

    2009-08-04 18:01:00
  • python通过opencv调用摄像头操作实例分析

    2023-03-09 14:32:04
  • Python实现普通图片转ico图标的方法详解

    2023-08-13 07:09:36
  • Python OpenCV去除字母后面的杂线操作

    2023-08-02 15:18:47
  • 管理员必读10个重要MySQL客户启动选项

    2008-06-07 16:57:00
  • Python序列化与反序列化pickle用法实例

    2022-04-14 11:44:06
  • php checkbox复选框值的获取与checkbox默认值输出方法

    2023-11-14 13:41:12
  • Python中非常实用的Math模块函数教程详解

    2022-12-08 02:12:49
  • Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)

    2021-01-23 04:23:13
  • python+tkinter编写电脑桌面放大镜程序实例代码

    2023-08-02 17:10:43
  • 编写python代码实现简单抽奖器

    2023-04-07 12:32:48
  • python批量下载网站马拉松照片的完整步骤

    2023-08-31 19:00:27
  • firefox与ie 的javascript区别

    2010-03-14 11:30:00
  • PyQt5实现界面(页面)跳转的示例代码

    2023-06-21 18:48:43
  • python编写网页爬虫脚本并实现APScheduler调度

    2021-07-07 19:23:09
  • ACCESS入门教程:窗口和菜单的使用

    2008-01-03 20:15:00
  • 基于python使用OpenCV进行物体轮廓排序

    2022-06-27 23:25:01
  • Python海象运算符超详细讲解

    2023-08-04 17:26:19
  • 教程javascript的function(函数)

    2007-09-30 13:38:00
  • asp之家 网络编程 m.aspxhome.com