作者: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
◆ ◆ ◆ ◆ ◆
长按二维码关注我们
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢