1 . 什么是scrapy ? python
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,很强悍.所谓的框架就是一个已经被集成了各类功能(高性能异步下载 , 队列 , 分布式 , 解析 , 持久化等)的具备很强通用性的项目模板.并发
2 . 安装 app
Linux : 框架
pip3 install scrapydom
Windows : 异步
a . pip3 install wheelscrapy
b . 下载 twisted http:
/
/
www.lfd.uci.edu
/
~gohlke
/
pythonlibs
/
#twisted
分布式
已经给大家下好了 --> twisted文件.zip (请叫我雷锋)ide
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
而后执行便可 !!!!!