当前位置 : 主页 > 编程语言 > python >

scrapy(一)环境的安装,框架的基本介绍,运行流程和小案例

来源:互联网 收集:自由互联 发布时间:2022-10-26
一、安装环境 scrapy 安装 1.安装Twisted ​​www.lfd.uci.edu/~gohlke/pyt…​​ Twisted‑18.9.0‑cp36‑cp36m‑win32.whl cp36 是python版本win32是python的位数 2.命令安装 pip install Twisted‑18.9.0‑cp36‑cp36m‑

一、安装环境

scrapy 安装

1.安装Twisted ​​www.lfd.uci.edu/~gohlke/pyt…​​

Twisted‑18.9.0‑cp36‑cp36m‑win32.whl cp36 是python版本win32是python的位数

2.命令安装

pip install Twisted‑18.9.0‑cp36‑cp36m‑win32.whl

3.pip install scrapy

pip list 查看已经安装的第三方库

二、基本介绍

之前学习的请求库:urllib urllib3 requeste 解析库:re lxml Bs4(BeautifulSoup4),scripy是纯python开发的一个高效结构化的网页抓取框架

三、命令

1.全局命令

scrapy startproject 创建项目

2.项目命令

scrapy genspider [options] <name> <domain>创建爬虫文件

scrapy genspider baidu_spider baidu.com

scrapy crawl 运行爬虫

scrapy list 查看当前项目可运行的爬虫

四、注意事项

此框架默认遵守robots协议,可以在settings中修改ROBOTSTXT_OBEY为false

五、运行流程

scrapy 运行流程,engine(引擎) spider(爬虫文件) engine(引擎) scheduler(调度器) downloader(下载器) engine(引擎) spider(爬虫文件) tiem(管道)

六、实际案例

第一步 创建项目 scrapy startproject TanzhouSpider

第二步 创建spider文件 scrapy genspider tz_spider shiguangkey.com

第三步 编写items文件,知道自己需要抓取的数据

第四步 解析数据,提取Request或者items

第五步 保存数据

用的到基础知识点:yield 生成器,回调函数,isinstance 判断实例类型,zip 方法两个列表,返回一个大的列表,元素是一一对应的元组

spider文件中的内容:

# -*- coding: utf-8 -*-
import scrapy
from ..items import MyspiderItem
class TzSpiderSpider(scrapy.Spider):
name = 'tz_spider'
# allowed_domains = ['shiguangkey.com']
start_urls = ['http://ke.qq.com/course/list?mt=100{}'.format(i) for i in range(1,7)]

def parse(self, response):
# 解析数据
# print(response.url+'========')
titles = response.xpath('//h4[@class="item-tt"]/a/text()')
# print('title',title)#匹配出来的是对象
titles = titles.extract()
# print(title)#匹配出来的是列表
school_names = response.xpath('//span[@class="item-source"]/a/text()')
# print('school_name',school_name)
school_names = school_names.extract()
items = MyspiderItem()
for title, school_name in zip(titles, school_names):
items['title'] = title
items['school_name'] = school_name
yield items
#返回item对象

# 跟进链接 翻页
next_url = response.xpath('//a[@class="page-next-btn icon-font i-v-right"]/@href').extract()
print(next_url)
if next_url:
yield scrapy.Request(url=next_url[0],callback=self.parse)
#数据写入在pipelines.py中

如上代码,我们是发起请求,然后使用xpath来定位数据,最后保存到items,我们也可以使用yield来分页爬取数据。

items.py中的内容:

# -*- coding: utf-8 -*-
import scrapy


class MyspiderItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# pass
title = scrapy.Field()
school_name = scrapy.Field()

如上代码,我们爬取的数据,保存items时,需要在这个文件中定义字段,才可以保存数据。

pipelines.py中的内容:

# -*- coding: utf-8 -*-

import json
class MyspiderPipeline(object):
def process_item(self, item, spider):
'''
这个方法是必须实现的
:param item:
:param spider:
:return:
'''
with open('item.json','a+',encoding='utf-8') as f:
# f.write(json.dumps(item)+'\n')#老写发
f.write(str(item)+'\n')#新写法
return item
#激活才可以写入到文件,激活在settings中的67行

如上代码,我们爬取的数据保存到items中,我们保存到文件中,当然,后续我们可以让其保存到数据库等一些地方。

网友评论