Scrapy框架的基本使用
Scrapy框架的基本使用
1.Scrapy安装和介绍
通用方式:可以从pip安装Scrapy及其依赖:
pip install Scrapy
scrapy组件
-
- 引擎(Scrapy)
用来处理整个系统的数据流处理, 触发事务(框架核心) - 调度器(Scheduler)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 - 下载器(Downloader)
用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) - 爬虫(Spiders)
爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 - 项目管道(Pipeline)
负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
- 引擎(Scrapy)
2.创建项目
scrapy startproject tutorial
项目结构:
tutorial/
scrapy.cfg # 部署配置文件
tutorial/ # Python模块,代码写在这个目录下
__init__.py
items.py # 项目项定义文件
pipelines.py # 项目管道文件
settings.py # 项目设置文件
spiders/ # 我们的爬虫/蜘蛛 目录
__init__.py
3.创建爬虫
创建爬虫spider文件。
scrapy genspider 爬虫名称 允许爬取的域
scrapy genspider test_spider example.com
spider文件夹中出现baizhan_spider.py文件
class BaizhanCourseSpider(scrapy.Spider):
name = 'baizhan_course'
allowed_domains = ['itbaizhan.com']
start_urls = ['http://itbaizhan.com/']
所要爬取的目标网址
def start_requests(self):
start_urls = 'https://www.itbaizhan.com/index/stage/navlist?id=4&stage=0'
yield scrapy.Request(start_urls)
对网站的结构进行解析(具体因网站结构为主)
设置修改settings.py配置文件相关配置
#修改内容及其结果如下:
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份
ROBOTSTXT_OBEY = False #可以忽略或者不遵守robots协议
ITEM_PIPELINES = {
'baizhan.pipelines.BaizhanPipeline': 300,
} # 开启piipelines,设置优先级300,数值越小优先级越高
DOWNLOAD_DELAY = 3 # 修改下载速度
数据持久化,将爬到的数据保存至数据库
items.py:数据结构模板文件。定义数据属性。
pipelines.py:管道文件。接收数据(items),进行持久化操作。
持久化流程:
1.爬虫文件爬取到数据后,需要将数据封装到items对象中。
2.使用yield关键字将items对象提交给pipelines管道进行持久化操作。
3.settings.py配置文件中开启管道
**items文件:**items.py
import scrapy
class SecondbloodItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
author = scrapy.Field() # 存储作者
content = scrapy.Field() # 存储段子内容
管道文件:pipelines.py
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
class SecondbloodPipeline(object):
#构造方法
def __init__(self):
self.fp = None #定义一个文件描述符属性
#下列都是在重写父类的方法:
#开始爬虫时,执行一次
def open_spider(self,spider):
print('爬虫开始')
self.fp = open('./data.txt', 'w')
#因为该方法会被执行调用多次,所以文件的开启和关闭操作写在了另外两个只会各自执行一次的方法中。
def process_item(self, item, spider):
#将爬虫程序提交的item进行持久化存储
self.fp.write(item['author'] ':' item['content'] '\n')
return item
#结束爬虫时,执行一次
def close_spider(self,spider):
self.fp.close()
print('爬虫结束')
4.执行爬虫
执行爬虫程序:
# 执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行存储
scrapy crawl test -o test.json
scrapy crawl test -o test.xml
scrapy crawl test -o test.csv
和settings.py同级目录下创建start.py文件
from scrapy.cmdline import execute
execute('scrapy crawl test'.split())
ml
scrapy crawl test -o test.csv
和settings.py同级目录下创建start.py文件
```python
from scrapy.cmdline import execute
execute('scrapy crawl test'.split())
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfihkfb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13