Scrapy爬虫框架学习一
程序员文章站
2022-05-06 20:29:22
...
Scrapy爬虫框架学习(一)
官方文档给出的例子爬取的网址失效,加上语法版本问题导致一些功能无法实现,我自己修正了一下,以让后人事倍功半,避免空耗时间。
正文
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
Scrapy安装只需要pip install scrapy即可
创建一个scrapy项目
#在python的workspace文件夹中打开cmd命令窗口,然后在cmd中输入以下命令
scrapy startproject tutorial
#此时在python的workspace文件夹会生成一个scarpy项目
#项目结构如下
tutorial/
scrapy.cfg
tutorial/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
#spider文件夹下面是自己要实现的爬取功能,需在此文件夹中创建具体爬取方式的python文件
先对项目自带的py文件做一个简要了解(先不要深究,写完项目有个通透了解后再去详细了解源码及组件)
items.py:需要提取的数据结构定义文件。
pipelines.py: 用来对items里面提取的数据做进一步处理,如保存等。
settings.py: 项目的配置文件。
spiders/: 放置spider代码的目录。 就是在此文件夹创建具体爬取方式的py文件
item.py具体实现内容
import scrapy
class DmozItem(scrapy.Item): #自定义DmozItem类继承scrapy的Item类
title = scrapy.Field()
link = scrapy.Field()
#源码中继承关系 DmozItem——scrapy.Item——DictItem——BaseItem——object_ref——object 简单理解:自定义的DmozItem类就是抓取存取内容的键值对的集合,具体抓取内容的最小颗粒
#title、link就是键,爬取的每一条内容就是值 ,title = scrapy.Field() 就是定义一个字典
#源码中class Field(dict): 继承于字典,源码中解释:dict() -> new empty dictionary
在spiders文件夹创建具体实现
#在此文件夹下面创建forth.py文件
import scrapy
class Lagou(scrapy.Spider):
name = 'forth' #cmd命令具体爬取时,该name起定位作用
start_urls = [
'http://quotes.toscrape.com/' #具体的爬取网址,可以写多个,初步案例,先只写一个
]
#parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
def parse(self,response):
#response.xpath是通过xpath方式定位爬取网页的具体内容,本文的xpath的含义是:class是“quote”的div,其下面的class是“text”的span标签内容
for item in response.xpath('//div[@class = "quote"]/span[@class="text"]'):
print(item.xpath('text()').extract()[0]) #提取span的文字内容,extract提取的是数组
测试输出
在该项目所在的文件夹中调用cmd命令
#在cmd命令行中输入以下内容
scrapy crawl forth
#在命令行日志中可以看到抓取的诗词内容全部打印出来