欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python之爬虫学习——scrapy(1)

程序员文章站 2022-05-06 18:50:39
...

文档:爬虫笔记15–13关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字典”。


在我们练习过程中因为熟练程度的原因,会先写代码,然后定义数据,设置管道等,但在实际开发中一般都是先定义数据,然后在进行代码开发。

先定义数据,再写爬虫
今天先写到这里,因为是后补写,所以很多坑并不是很全面,等后续碰到之前的一些坑,我会再次修改提出来,一共打架借鉴。
好了,晚安小伙伴儿们~~~