python的scrapy框架爬虫基础

     作者:Riggle

     来源:文科数据员

From:阿里云大学的爬虫项目编写实战课程

For:进入scrapy的大门

一般来说,我们在爬虫的时候会编写一个.py文件来实现爬虫,一旦需要解析、反爬、存储等操作后,这个代码就会很复杂。懒惰使人创新,为了提高爬虫效率,程序员们设计出了scrapy框架,利用多个.py可以迅速创建爬虫半成品,还方便日后爬虫项目的维护。

安装,避坑

安装时会遇到很多坑,所以请务必采用韦玮老师推荐的方式。阿里云课堂韦玮老师的课程ppt截图如下——

注意,这里有有的whl文件名称是cp35-win32...这些是python的版本与相应的电脑系统;

下载pywin32很容易,但配置是我所不熟悉的。方式是

找到pywin32所在的文件夹,将其中的两个dll文件复制到c盘中windows文件夹中的system32文件夹里面。即路径为C:\Windows\System32

按顺序搞定这些步骤,将会完成安装。

scrapy通过指令来管理爬虫项目的。所以需要熟悉各个指令。**

创建爬虫项目

首先,需要清楚,爬虫项目与爬虫文件不一样,二者的脚本文件不一样。爬虫项目>爬虫文件。

第一步
#第一步:在指定的文件夹中,打开cmd,输入
scrapy startproject ali_first #将会生成ali_first文件夹

将会在指定文件夹中,生成ali_first文件夹,打开ali_first文件夹后,如下

进入核心文件

init是初始化文件,items是项目定义文件,可以定义内容、标题这些内容;

定义好了之后,我们打开spider文件夹(因为一个项目有多个爬虫文件,所以放在一个文件夹中);

middlewares是中间键;

pipelines是爬后处理;

settings是设置信息,包括伪装uesagent这些。

进入爬虫项目

配置好之后,我们就可以进入项目进行操作。

第二步
# 第二步:进入爬虫项目
cd ali_first #cmd深入所创建的文件夹里
scrapy genspider -l #查看爬虫模板,注意是l,不是1

得到

Available templates:
  basic #基础模板
  crawl #通用模板,可以套用改模板写自己的爬虫(最常用)
  csvfeed #爬csv的
  xmlfeed #爬xml的
第三步
# 生成自己的scrapy爬虫
scrapy genspider -t basic fst aliwx.com.cn # 进入哪个模板就写哪个模板,然后把自己创建的文件名写在basic后面。然后把要爬的域名写在文件名之后。注意是域名,不含主机名www。
第四步
#运行刚才生成的自己的爬虫文件
scrapy crawl fst

其他命令

#查看当前文件夹的爬虫有哪些
scrapy list
# 查看还有哪些操作
scrapy

下面是scrapy的所有指令。常用的就是以上演示的那些。

Scrapy 1.8.0 - project: ali_first

Usage:
  scrapy <command> [options] [args]

Available commands:
  bench         Run quick benchmark test
  check         Check spider contracts
  crawl         Run a spider
  edit          Edit spider
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  list          List available spiders
  parse         Parse URL (using its spider) and print the results
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

Use "scrapy <command> -h" to see more info about a command

编写基础

以下将正式进行编写练习,除了上面所列的创建步骤之外,增加了编写爬虫文件,以及配置的步骤。阿里的这位老师建议要尽量完整这些步骤,尤其是pipelines文件。

简单案例-阿里文学首页书名

爬取阿里文学,首页的书名

第一步

创建爬虫项目。为方便起见,使用上面已经创建好的。

第二步

分析目标网站,查到书名所在的elements,如下。

<p class="title" data-spm-anchor-id="aliwx.index.0.i1.836a204ecHNyb0">最佳豪婿</p>
第三步

在lst文件中,把start_urls补全。把www.加上。

# -*- coding: utf-8 -*-
import scrapy

class FstSpider(scrapy.Spider):
    name = 'fst'
    allowed_domains = ['aliwx.com.cn']#爬虫域名
    start_urls = ['http://www.aliwx.com.cn/']#爬虫起始网址

    def parse(self, response):
        pass

会按顺序响应回调函数,就是parse函数中的response的相应信息。就在parse函数下面进行编辑内容。

第四步

定义目标 ,回到items文件中定义要爬取的内容的“容器”变量。title=scrapy.Field()

# -*- coding: utf-8 -*-
import scrapy

class AliFirstItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field() #创建title的容器,当然可以不止一个容器

之后就可以在fst文件中进行代码编写了

第五步

从核心文件出发,导入items文件中的类函数class

from ali_first.items import AliFirstItem

创建一个它的对象即可使用。

def parse(self, response):
item = AliFirstItem()#创建一个对象即可使用parse
item['title']=response.xpath("//p[@class='title']/text()").extract()#爬取其中p的title的text文件
yield item#item就可以返回给另一个文件,这里就是返回给了pipelines文件

这里也可以先不yield,先print一下,测试一下看能不能输出

print(item)
#yield item

#在cmd中运行fst文件
scrapy crawl fst

测试了一下,输出正常。

第六步

在pipelines中编写

class AliFirstPipeline(object):
    def process_item(self, item, spider):
        for i in range(0,len(item['title'])):#枚举每一项获取的title
            print('---------')#分割线以直观查看一下
            print(item['title'][i])#得到每一项
        return item

在setting文件中开启原来的pipelines。

ITEM_PIPELINES = {
    'ali_first.pipelines.AliFirstPipeline': 300,#开启的时候,去掉注释,将piplines后面的类函数名称更换为现在pipelines中的那个。
}

最后,在cmd中输出以下

---------
绝品小神农
---------
都市弃少兵王
---------
洪荒神帝
---------
村野小圣医
...

参考资料:阿里云大学-python完全自学手册

文字编辑:数据猿Riggle

◆ ◆ ◆  ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 全球股市跳水大战,谁最坑爹!

 上万条数据撕开微博热搜的真相!

 你相信逛B站也能学编程吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值