用了将近两个星期,终于对scrapy有了初步了解,并且使用scrapy来爬取到了动态加载的网页。再此给自己这两周的学习成果做一个详细的过程复盘,顺带重温下忘掉的知识。
首先看看项目要求。
要爬取的是左边的四个大板块里的四个小版块的文章,然后按照以下的格式保存在文档中。
最终爬取的结果是这样的:
接下来让我们看看具体过程是怎样的?
1.打开命令行,跳转到指定文件存放的目录下,新建一个scrapy项目。如下所示
cd C:\Users\ME\Desktop\Python project\pachong\scrapy
scrapy startproject test(项目名称)
我们可以看到有两个提示:
You can start your first spider with:
cd test1
scrapy genspider example example.com
第一个就是直接跳转到项目根目录下。
第二个就是新建爬虫文件,新建爬虫文件我们可以在spiders目录下创建,建议使用scrapy genspider example example.com
example指的是爬虫文件,example.com指的是要爬取的网址首页,也就是最开始的首页。
我们先跳转到根目录下 cd test1之后,输入: scrapy genspider finance business.sohu.com
在pycharm中就会自动生成文件,并且在爬虫文件finance.py中自动生成一些代码,不然的话还要自己手打,忒麻烦。
scrapy.cfg: 项目的配置文件
test1/: 该项目的python模块。之后您将在此加入代码。
test1/items.py: 项目中的item文件.
test1/pipelines.py: 项目中的pipelines文件.
test1/settings.py: 项目的设置文件
test1/spiders/: 放置spider代码的目录.
Scrapy默认是不能在IDE中调试的,所以呢我们要新建一个文件放到根目录下,这个名字你喜欢怎么取都行,这里举一个例子。
在根目录中新建一个py文件叫:main.py;在里面写入以下任意一个内容,但是要注意文件名是你的爬虫名字这个很关键。这里的爬虫名字就是finance
from scrapy import cmdline
name ='finance'
cmd = 'scrapy crawl {0}{1}'.format(name,'')
cmdline.execute(cmd.split())
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'finance'])
# from scrapy.cmdline import execute
# import os
# import sys
# #因为每次要输入副目录很麻烦,通过调用这两个模块,能够快速找到main文件的副目录
# sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# #print os.path.dirname(os.path.abspath(__file__))
# #添加完命令之后,我们在项目下的Spyder的爬虫文件就可以设置断点进行调试了
# execute(['scrapy','crawl','finance'])
首先了解下scrapy爬虫是怎么工作的,我们在官方文档中看到这幅图:
我们再回过头来看看创建的爬虫文件
在开始编辑爬虫文件之前,我们做一些基本的准备工作。
1.在settings.py中取消最下面几行的注释:作用在于Scrapy会缓存你有的Requests!当你再次请求时,如果存在缓存文档则返回缓存文档,而不是去网站请求,这样既加快了本地调试速度,也减轻了 网站的压力。一举多得
2.在items.py 文件中根据需求定义一些字段
比如说大板块的名字,url,小版块的名字,url,新闻作者,发布时间,抓取时间,标题,正文等等。
这样爬虫爬取的文件就会对应保存在相关的字段中了。
好了,是不是已经等不及了,我们现在就开始编写我们的爬虫文件
首先先把一些需要使用的包给导入进去,这样方便之后的编写。具体哪些包有什么用,自行百度就好。