Python之爬虫学习——scrapy(1)
-
嘿,大家好!!!
听了好多天才来更新,这些天一直在研究scrspy框架与xpath的用法,讲真,不难,但是对于新手小白的我,很费劲啊啊啊啊啊啊啊啊~~~~
好了,牢骚完了,说正题,大家应该看到头顶的那个文档了,那是我在学习scrapy时做的笔记,时用有道云。笔记做的有点繁琐,因为新手嘛,怕忘记知识点,所以都写了,但这有个好处,那就是详细,我个人觉得,看我笔记你就可以学会scrapy框架和简单用法……(哈哈哈,吹个小牛~)。
具体的用法我就不在这里赘述,直接说我在应用过程中踩过的坑,希望看到的小宝贝们能跳过去,因为那是水灵灵的时间啊~~
新建项目(object)
要学习先了解 scrapy是一个爬虫的框架,就像是盖房前要先搭架子,先打好地基、浇筑墙体、确定进出门的位置、确定窗户等等,这就是框架。
而scrapy框架便是这个预制好的基础,而我们只要引用它,并给它填充必要的内容,它可以代替我们去抓取成千上万个网站信息,是目前比较普遍的一种。
新建项目(object):scrapy startproject xxx(爬虫名字)
首先,要在本地电脑打开终端(windows:Win+R,输入cmd;mac:command+空格,搜索“终端”),然后跳转到你想要保存项目的目录下。
假设你想跳转到E盘里名为Python文件夹中的Pythoncode子文件夹。你需要再命令行输入
e:
,就会跳转到e盘,再输入cd Python
,就能跳转到Python文件夹。接着输入cd Pythoncode
,就能跳转到Python文件夹里的Pythoncode子文件夹。然后,再输入一行能帮我们创建Scrapy项目的命令:
scrapy startproject xxx(项目名称)
xxx就是Scrapy项目的名字。按下enter键,一个Scrapy项目就创建成功了。
Scrapy项目里每个文件都有特定的功能:
比如settings.py 是scrapy里的各种设置。items.py是用来定义数据的,pipelines.py是用来处理数据的,它们对应的就是Scrapy的结构中的Item
Pipeline(数据管道)。
坑一:
项目新建时,命令行的代码执行,必须要有 cd 这个命令,否则就会报 “不是内部命令”, 例如:
e:
cd prthon
cd PythonCode
坑二:
访问到你要新建项目的文件夹后,开始新建项目命令,此时则不需要 cd 命令,而是直接执行:
scrapy startproject xxx(项目名称)
模块导入:
以头顶文档为例:
import scrapy
import bs4
导入BeautifulSoup用于解析和提取数据
导入scrapy是待会我们要用创建类的方式写这个爬虫,我们所创建的类将直接继承scrapy中的scrapy.Spider类。这样,有许多好用属性和方法,就能够直接使用。
坑三:
爬虫类新建后,有一项确定访问域
allowed_domains = ['book.douban.com']
在这里有一点很重要,就是那个网址前面不能有HTTP://或者HTTPS://,这行代码的意思是,确定爬虫访问的区域域名,从而使你的小蜘蛛不会乱逛到不可知之地。。。
而如果你要爬取的网址不在这个域名范围内,则它就会被过滤掉。
坑四:
在scrapy中,我们会专门定义一个用于记录数据的类。
每一次,当数据完成记录,它会离开spiders,来到Scrapy Engine(引擎),引擎将它送入Item Pipeline(数据管道)处理。
定义这个类的py文件,正是items.py。
import scrapy
#导入scrapy
class DoubanItem(scrapy.Item):
#定义一个类DoubanItem,它继承自scrapy.Item
title = scrapy.Field()
#定义书名的数据属性
publish = scrapy.Field()
#定义出版信息的数据属性
score = scrapy.Field()
#定义评分的数据属性
book = DoubanItem()
# 实例化一个DoubanItem对象
book['title'] = '海边的卡夫卡'
book['publish'] = '[日] 村上春树 / 林少华 / 上海译文出版社 / 2003'
book['score'] = '8.1'
print(book)
print(type(book))
打印出来的结果的确和字典非常相像,但它却并不是dict,它的数据类型是我们定义的DoubanItem,属于“自定义的Python字典”。
在我们练习过程中因为熟练程度的原因,会先写代码,然后定义数据,设置管道等,但在实际开发中一般都是先定义数据,然后在进行代码开发。
先定义数据,再写爬虫
今天先写到这里,因为是后补写,所以很多坑并不是很全面,等后续碰到之前的一些坑,我会再次修改提出来,一共打架借鉴。
好了,晚安小伙伴儿们~~~
上一篇: Python爬虫之Scrapy环境搭建
下一篇: 请你谈谈频繁full gc怎么排查?