失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python爬虫——Scrapy框架的基本使用

Python爬虫——Scrapy框架的基本使用

时间:2020-08-18 05:44:46

相关推荐

Python爬虫——Scrapy框架的基本使用

目录

1.选取目标站点

目标站点分析

2.流程框架

3.爬虫实战

创建项目

创建spider

输出调试信息

4.抓取:

1.分析源代码

2.爬取中的存储(数据结构)

3.定义解析的方法

3.命令行交互模式

4.赋值

5.翻页

6.保存

1.选取目标站点

目标站点分析

/:scrapy官方提供的抓取网站

显示名人名言,作者,标签等信息

翻页为最简单的GET请求,通过改变URL的名称进行翻页

网页结构简单,没有任何的反爬虫措施

2.流程框架

抓取第一页

请求第一页的URL并得到源代码,进行下一步的分析

获取内容和下一页链接

分析源代码,提取首页内容,获取下一页链接等待进一步获取

翻页提取

请求下一页信息,分析内容并请求再下一页链接

保存爬取结果

将爬取结果保存为特定格式如文本,数据库

3.爬虫实战

在命令行中输入scrapy会输出提示

创建项目

scrapy startproject quotetutorial

会在当前目录生成项目文件

cdquotetutorial 进入项目文件夹

scrapy.cfg:配置文件,定义scrapy一些相关的部署信息

创建spider

scrapy genspider quotes

quotes:spider名称

:需要爬取网站的域名

scrapy.cfg

items.py:保存数据的数据结构

middlewares.py:在爬取过程中定义的中间件,用来处理request,response和exceptions等操作,可以在其中修改request,response和exceptions的相关配置

pipelines.py:项目管道,用来输出一些items

settings.py:定义配置信息

主要运行代码在spiders文件夹中

解析的操作在parse函数中

scrapy crawl quotes:执行spider

输出调试信息

info:提示信息

scrapy.utils.log:显示已启动

-06-01 19:34:39 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: firstscrapy)

scrapy.crawler:settings

Overridden settings: {'BOT_NAME': 'firstscrapy', 'NEWSPIDER_MODULE': 'firstscrapy.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['firstscrapy.spiders']}

scrapy.middleware:中间件(下载中间件:downloadermiddlewares;爬虫中间件:spidermiddlewares)

INFO: Spider opened:调用spider,开始抓取

-06-01 19:34:41 [scrapy.core.engine] DEBUG: Crawled (404) <GET /robots.txt> (referer: None)

-06-01 19:34:41 [scrapy.core.engine] DEBUG: Crawled (200) <GET /> (referer: None)

首先寻找robots.txt,没有返回状态码404,随后访问主页正常为200

statscollectors:输出爬取信息

quotes.py

改写代码:parse:请求完成后默认调用的方法/默认回调

eg:

def parse(self, response):print(response.text)

请求成功后将response的内容打印出来

4.抓取:

1.分析源代码

内容:text

作者:author

标签:tags(tags数量不固定,有几个抓几个)

2.爬取中的存储(数据结构)

items.py

定义field变量赋值,作为一个整体生成

3.定义解析的方法

quotes.py

11:定义选择每个区块

之后遍历每个区块,进一步筛选

13:声明对象

::text:选择标签内的文本内容

extract_first():拿到里面的文本内容

extract():把所有结果都找出来,类似于find和findall

3.命令行交互模式

scrapy shell

进入到交互模式下,可以进行一些相关的调试

爬取到的quotes为list格式,每一项为selector选择器

同为list

同为list,data类型为str

返回列表,内容为文本

返回第一个值

若为tags,就需要用extract()获取所有的标签

4.赋值

item['text'] = textitem['author'] = authoritem['tags'] = tagsyield item#将item生成出来

再次运行,即可完成单页索引信息的爬取

5.翻页

1.可通过改变URL来完成翻页

2.在next中对应着下一页的超链接,从网页代码中获取

提取:

next = response.css('.pager .next a::attr(href)').extract_first()

attr():获取属性的内容

补全为完整的URL:

url = response.urljoin(next)

urljoin():补全URL

生成request,实现翻页循环:

url = response.urljoin(next)

callback:回调函数,定义response请求之后谁来处理

6.保存

保存为json格式

scrapy crawl quotes -o quotes.json

生成json文件并保存在项目目录下

保存为jl格式

scrapy crawl quotes -o quotes.jl

将结果保存为一行一行的格式,一行为一个item

保存为csv格式

scrapy crawl quotes -o quotes.csv

保存为xml格式

scrapy crawl quotes -o quotes.xml

其他格式同改后缀即可,如pickle,marshal等

保存至FTP服务器

scrapy crawl quotes -o ftp://user:pass@/path/quotes.csv

pipelines

在保存前需要做item的处理,如在解析完后有些item不是我们想要的,如要将item保存到数据库里需要借助pipelines工具。

eg:限制名言的长度,如果大于50将后面的变为省略号

pipelines.py

class TextPipeline(object):def __init__(self):self.limit = 50def process_item(self, item, spider):if item['text']:if len(item['text']) > self.limit:item['text'] = item['text'][0:self.limit].rstrip() + '. . .'else:return DropItem('Missing Text')

保存至MongoDB数据库

pipelines中:

class MongoPipeline(object):def __init__(self):self.mongo_uri = 'localhost'self.mongo_db = 'quotestutorial'def open_spider(self, spider):self.client = pymongo.MongoClient(self.mongo_uri)self.db = self.client[self.mongo_db]def process_item(self, item, spider):name = item.__class__.__name__self.db[name].insert(dict(item))return itemdef close_spider(self, spider):self.client.close()

settings.py中:

ITEM_PIPELINES = {'firstscrapy.pipelines.TextPipeline': 300,'firstscrapy.pipelines.MongoPipeline': 400,}

保存结果

如果觉得《Python爬虫——Scrapy框架的基本使用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。