最近在学习scrapy框架,实在是有点难了,因为用起来的方法很不一样,很有Django的味道(就是我放弃了的Django),要在终端运行...隔了一天也忘得差不多了,现在来复习一下再继续听课.
笔记
什么是框架 就是一个集成了很多功能并且具有很强通用性的一个项目模板 如何学习框架 专门学习框架封装的各种功能的详细用法 什么是scrapy框架 爬虫中封装好的一个明星框架 功能: 高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式 环境安装: pip install wheel pip install twisted pip install pywin32 pip install scrapy 创建一个工程:scrapy startproject xxx cd 进入工程,在子目录中创建一个爬虫文件 cd 工程名 scrapy genspider spidername www.xxx.com 执行工程: scrapy crawl spidername
现在来具体操作一下:
我已经用scrapy startproject scrapy框架创建了文件夹,现在要在这个文件夹中创建新的项目,所以要使用cd进入文件夹,
然后再使用scrapy genspider xxx www.xxx.com 在文件夹中创建新的项目.这里我将新项目命名为first
在文件夹中会自动生成这些文件.
先来看看spider文件
代码语言:javascript复制import scrapy
class SpiderProjectSpider(scrapy.Spider):
# 爬虫文件名称,就是爬虫源文件的唯一标识,一定不能重复
name = 'project1'
# 允许的域名,用来限定start_url列表中哪些url可以进行请求的发送,一般不用
# allowed_domains = ['www.xxx.com']
# 起始的url列表,该列表存放的url会被scrapy自动进行请求的发送
start_urls = ['http://www.baidu.com', 'http://www.sogou.com']
# 用作数据解析,response参数表示的是请求成功后对应的响应对象.
def parse(self, response):
print(response)
然后再来看看settings.py这个文件,里面是一些配置,其中的ROBOTSTXT_OBEY是设置是否遵守robot协议的意思,我们将他修改为False,这样才可以爬取到数据,否则很多网站都是爬不了的.
我们使用scrapy crawl project1尝试执行,看看会得到什么结果.
可以看到打印出来了很多日志,这样就很难找到我们想要看到的东西,所有我们要去配置里设置一下,在settings中加上这么一行.
代码语言:javascript复制LOG_LEVEL = "ERROR"
代码语言:javascript复制
代码语言:javascript复制 就可以只打印出我们想要的结果了.
现在我们去实施一下,爬取糗事百科中的作者 段子.
同样的,先创建好项目,配置好设置.
代码语言:javascript复制import scrapy
class QiubaiSpider(scrapy.Spider):
name = 'qiubai'
# allowed_domains = ['www.xxx.com']
#将要爬取的url地址
start_urls = ['https://www.qiushibaike.com/text/']
def parse(self, response): # response就是返回的响应
# 解析:作者名称 段子内容
div_list = response.xpath("//div[@class='col1 old-style-col1']/div")
for div in div_list:
# extract可以将selector对象中的data中参数存储的字符串
author = div.xpath("./div[1]/a[2]/h2/text()")[0].extract()
content = div.xpath("./a[1]/div/span//text()").extract()
print(author, content)
break
成功将内容打印出来.
然后我们要学习将数据持久化存储,不能单单只是在终端中显示,下一次看就没了.
第一种方法是用终端指令存储数据
代码语言:javascript复制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("//div[@class='col1 old-style-col1']/div")
all_data = []
for div in div_list:
# extract可以将selector对象中的data中参数存cd/储的字符串
author = div.xpath("./div[1]/a[2]/h2/text()")[0].extract()
content = div.xpath("./a[1]/div/span//text()").extract()
content = "".join(content)
dic = {
"author":author,
"content":content
}
all_data.append(dic)
return all_data
将数据存储到一个列表中,最后用终端命令scrapy crawl qiubai -o ./qiubai.csv进行存储.
实在是有点难看不懂了,先到这里吧,一会开一篇继续写好了.