python网路爬虫 scrapy教程(一)

1 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述

本文针对python3,阅读前请确定您已经了解最基础的python语法,并安装了python3、pip3、scrapy、pymysql等基础模块

什么是 scrapy

我理解为就是用最简单的代码,可以迅速的爬取到更多的内容的一个python框架

开始一个scrapy项目

在你想创建项目的目录中,执行 scrapy startproject 项目名称,这样就会在该目录中,生成一个以项目名称命名的项目目录。
写一个爬虫项目需要用到的主要文件:

你会发现,项目中好像一共就只有这些文件

  • spiders目录 ——— 执行scrapy genspider 爬虫名称 目标主域名会生成一个爬虫文件,该文件就是爬取网页数据处理逻辑的主要文件。
  • items.py ——— 这家伙就像是一辆小货车,把你爬取的数据打包装车,运到后面的pipelines.py中
  • pipelines.py ——— 这是你最后对已获取的数据内容进行处理的地方,小货车把数据搬过来了,你只需要在这里把他们扔进仓库或是存到文件就好
  • middlewares.py ——— 去别人的地方偷东西,主人肯定是会防备的,今天装个护栏网,明天弄个防盗门。这个文件,就是进行伪装的地方,让对方网站识别不出我们是蜘蛛,而是真的访客。
  • settings.py ——— ,显而易见,这是我们的配置文件。

工作流程

打个比方,这个框架就是个小偷团伙:

  1. spiders内的爬虫文件,是直接出动的扒手。
  2. 在到目标超市前,先让middlewares.py这个化妆师给伪装一下。
  3. 然后到目标超市中专找贵的东西批量、精确的下手。
  4. 偷到东西后,随偷随放到items.py这个传送带中运走
  5. 运输到pipelines.py这个后勤部后,直接把东西分类存放起来。

实际操作

接下来,就让我们按步骤,实际操作一下。

第一步:
在spiders目录中,创建自己的爬虫文件testspider.py。如果比较熟练的话,就直接scrapy genspider testspider scrapyd.cn,会直接生成带下面代码的文件。这就是我们爬虫的主文件,他必须继承scrapy类
定义一个类,像下面这样,当然还有另外一个写法,不过我不太推荐。

import scrapy

class TestSpider(scrapy.Spider):
    name = 'testspider' # 爬虫名称,注意名字不能与项目名称相同
    allowed_domains = ['scrapyd.cn'] # 过滤器,非在这个主域下的不去爬取 
    start_urls = ['http://lab.scrapyd.cn']  # 目标网址,可以是个数组
    
    # 默认的解析函数
    def parse(self, response):
        pass

在上面的代码块里,你可以看到这样几项。

  • name ——— 爬虫的名称,一个项目中,爬虫名称是唯一的,这样你才可以在执行的时候准确的喊,王大蛛,上。
  • allowed_domains ——— 这个列表中写的要过滤的内容
  • start_urls ——— 这就是要爬取的目标网址,当你执行scrapy crawl 王大蛛时,爬虫程序就会像人正常访问网页一样,访问一下start_url中的网页,并且补货网页的全部html信息回来,直接扔给parse方法,你可能已经注意到parse方法中的response参数了。
  • parse方法 ——— 当爬虫执行后,把页面完整的获取过来,传递到response中,parse方法,去处理response中我们想要的数据,以及提取要继续深度爬取的url,如分页,详情页。

注意,页面如果是js渲染的话,需要另行处理。

先写个简单的栗子:

import scrapy

class TestSpider(scrapy.Spider):
    name = 'testspider' # 爬虫名称,注意名字不能与项目名称相同
    allowed_domains = ['scrapyd.cn'] # 过滤器,非在这个主域下的不去爬取 
    start_urls = ['http://lab.scrapyd.cn']  # 目标网址,可以是个数组
    
    # 默认的解析函数
    def parse(self, response):
        title = response.css('title::text').get() # css选择器,获取页面title标签内的文字内容
        detail_url = response.css('div.quote span:nth-child(2) a::attr(href)').get() # 获取第一个文章详情页链接
        

相信你注意到了,response.css(),这是对页面标签的选择器,熟悉js的兄弟们,一看就笑了,这个我会啊! 当然,如果你不熟悉css选择器,可以选择另外一个response.xpath()这个东西上手起来,简直不能更简单了。

注意:get()获取第一个,getall()获取所有,获取所有后,可以遍历去进行下一步操作,使用控制台查看页面的元素会对你有很大的帮助

scrapy shell的使用

这家伙就是一个调试工具,在你写css和xpath选择器的时候,总不能每次写完,都执行一下爬虫,看看是不是写错了要爬的内容。如何使用:

  • 在terminal中执行 scrapy shell 目标网址,回车。 当你看到三个箭头时>>>,就可以开始调试的。
    输入response.css('title::text').get()回车试试看

更多的东西,可以看第二章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值