什么是框架
就是一个集成了很多功能并且具有很强的通用性的项目模板。
如何学习框架
专门学习框架封装的各种功能的详细用法。
什么是scrapy
爬虫中封装的一个异步爬虫明※框架。功能:高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式
scrapy框架的基本使用
环境安装 mac or linux: pip install scrapy windows : pip install wheel 下载twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 安装twisted pip install pywin32 pip install scrapy
或者使用Anaconda

创建项目爬虫命令:
scrapy startproject 项目名字
创建爬虫文件命令:
scrapy genspider 文件名字 域名(比如www.douban.com 域名就是douban.com)
运行爬虫文件命令:
scrapy crawl 文件名
使用Anaconda:
用spyder 创建一个python项目 打开Anaconda prompt, 输入 cd C:\Users\大哥\Desktop\python项目名称 scrapy startproject 项目名字 cd 项目名字 在spyders子目录中创建一个爬虫文件 scrapy genspider 爬虫name 域名(比如www.douban.com) 执行工程:scrapy crawl 爬虫name
import scrapy class FirstSpider(scrapy.Spider): #爬虫文件的名称:就是爬虫原文件的唯一标识 name = 'first' #允许的域名:用来限定start_urls 列表中哪些url可以进行请求发送,通常被注释掉 #allowed_domains = ['www.douban.com'] #启示的url列表:该列表中存放的url 会被scrapy自动进行方式请求 start_urls = ['http://www.baidu.com/','http://www.ai8py.com/'] #用作于数据解析,response参数就是请求成功后对应的响应对象,parse方法调用的次数等于请求的次数 def parse(self, response): #response表示的就是服务器返回的响应对象 print(response)
setting.py 中
更改 USER_AGENT ROBOTSTXT_OBEY
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62' # Obey robots.txt rules ROBOTSTXT_OBEY = False LOG_LEVEL = 'ERROR'
scrapy数据解析
使用:response.xpath() scrapy封装的xpath和etree中xpath的区别: scrapy中的xpath直接定位到标签类型中存储的值或者属性值取出,返回的是selector对象,且相关的数据值是存储selector对象中的data属性中,需要调用extract()、extract_first()取出的字符串数据。
scrapy 数据解析操作
import scrapy
import scrapy class QiubaiSpider(scrapy.Spider): name = 'qiubai' #allowed_domains = ['www.xxx.com'] start_urls = ['https://www.qiushibaike.com/text/'] def parse(self, response): #作者的名称和段子的内容 div_list = response.xpath('//*[@id="content"]/div/div[2]/div') for div in div_list: #etree中的xpath返回的是字符串 #xpath返回的是列表,但是列表元素一定是selector类型的对象 #extract()可以将selector对象中的data参数存储的字符串提取出来 #author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract() #返回的列表只有一个值时可以使用extract_first() author = div.xpath('./div[1]/a[2]/h2/text()').extract_first() #列表调用了extract()之后, #则表示将列表中的每一个selector对象中data对应的字符串提取出来,组成一个列表 content = div.xpath('./a[1]/div/span//text()').extract() content = ''.join(content) print(author,content) break