简介和基础应用
一 . scrapy框架的简介
1 . 什么是scrapy ?
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,很强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载 , 队列 , 分布式 , 解析 , 持久化等)的具有很强通用性的项目模板.
2 . 安装
Linux :
pip3 install scrapy
Windows :
a . pip3 install wheel
b . 下载 twisted http:
/
/
www.lfd.uci.edu
/
~gohlke
/
pythonlibs
/
#twisted
已经给你们下好了 --> twisted文件.zip (请叫我雷锋)
c . 进入下载目录,执行
pip3 install Twisted‑
17.1
.
0
‑cp35‑cp35m‑win_amd64.whl
d . pip3 install pywin32
e . pip3 install scrapy
二 . 基础使用
注意 : 在创建项目 / 应用 ,执行程序的时候都是在cmd中进行的
1 . 创建项目 : scrapy startproject xxx(项目名)
项目结构 :
frist_boll/ scrapy.cfg: frist_boll/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py scrapy.cfg #项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中) items.py #设置数据存储模板,用于结构化数据,如:Django的Model pipelines #数据持久化处理 settings.py #配置文件,如:递归的层数、并发数,延迟下载等 spiders #爬虫目录,如:创建文件,编写爬虫解析规则
2 . 创建爬虫应用程序 :
cd frist_boll : 进入项目目录
scrapy genspider 应用名称 爬虫网页的起始url :
注意 : 如果起始url不知道可以随便写一个,然后进入项目中在进行修改
3 . 编写爬虫文件 :
在执行步骤2完毕后,会在项目的spider中生成一个应用名的py文件,文件源码 :
import scrapy class FirstHhSpider(scrapy.Spider): name = 'first_hh' #应用名称 #允许爬取的域名(如果遇到非该域名的url则爬取不到数据) allowed_domains = ['https://www.xxx.com/'] #起始爬取的url start_urls = ['https://www.xxx.com/'] #访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll def parse(self, response): print(response.text) #获取字符串类型的响应内容 print(response.body)#获取字节类型的相应内容
4 . 设置修改 settings.py 文件中的配置
修改内容及其结果如下: 19行: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'
#伪装请求载体身份 22行:ROBOTSTXT_OBEY = False
#可以忽略或者不遵守robots协议
5 . 执行爬虫程序 : scrapy crawl 应用名称
scrapy crawl first_hh : 这样执行会显示执行的日志信息
scrapy crawl first_hh -nolog : 这样执行不会显示执行的日志信息
6 . 爬取糗事百科中段子的内容和标题
# 在first_hh.py 中写 import scrapy class FirstHhiSpider(scrapy.Spider): name = 'first_hh' allowed_domains = ['https://www.qiushibaike.com/'] start_urls = ['https://www.qiushibaike.com/'] def parse(self, response): #xpath为response中的方法,可以将xpath表达式直接作用于该函数中 odiv = response.xpath('//div[@id="content-left"]/div') content_list = [] #用于存储解析到的数据 for div in odiv: #xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。 author = div.xpath('.//div[@class="author clearfix"]/a/h2/text()')[0].extract() content=div.xpath('.//div[@class="content"]/span/text()')[0].extract() #将解析到的内容封装到字典中 dic={ '作者':author, '内容':content } #将数据存储到content_list这个列表中 content_list.append(dic) return content_list
然后执行即可 !!!!!