1.准备环境
- 这里只需要介绍windows的就好,其他system可以直接命令安装即可
- pip install wheel
- 还需要安装Twisted,这个东西需要查看自己的版本和对应的版本关系,不然可能不兼容
- pip install win32
- pip install scrapy
2.如何使用?
# 创建工程
scrapy startproject pro_name
# 创建爬虫文件
scrapy genspider spider_name www.xxx.com # 这里要注意,记得进入工程文件夹中再创建爬虫文件
- 持久化存储(基于终端指令实现)
思路:
- 将爬取到的数据进行处理,拿到想要的数据
- 将数据添加到字典当中(而不是字符串)
- 返回字典
- 终端命令执行
# item操作
class TestSpider(scrapy.Spider):
name = 'test'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://www.xuexila.com/duanzi/nahanduanzi/2870287.html']
def parse(self, response):
page_text_list = response.xpath('//*[@id="contentText"]//p/text()').extract()
all_datas = []
for text in page_text_list:
text = ''.join(text)
dic = {
'context':text
}
all_datas.append(dic)
return all_datas
补充:这里会弹出一大堆的没啥用的日志文件,我们需要修改一下日志等级,在settings文件下添加日志等级
- 回调函数Callback
# url模板
url = 'https://www.xuexila.com/duanzi/huangduanzi/2913969_%d.html'
# 添加持久化数据
page_num = 2
def parse(self,response):
...
# 2.传递数据
if self.page_num <= 3:
new_url = format(self.url%self.page_num)
self.page_num += 1
# callback回调函数,可以回调函数,这里问题来了,那我们怎么传递参数呢?
yield scrapy.Request(url=new_url,callback=self.parse)
# 可以调用其他的函数
yield scrapy.Request(url=new_url,callback=self.other_func,meta={'key':value})
- 持久化存储(基于管道实现)
# spider文件中
class TestSpider(scrapy.Spider):
name = 'test'
start_urls = ['https://www.xuexila.com/duanzi/huangduanzi/2913969.html']
# 添加持久化数据
def parse(self, response):
page_text_list = response.xpath('//*[@id="contentText"]//p/text()').extract()
for text in page_text_list:
text = ''.join(text)
# 实例化item
item = ProTestItem()
item['text'] = text
# 提交管道
yield item
- items文件
class ProTestItem(scrapy.Item):
# 接收传递的字段
text = scrapy.Field()
- piplines文件
class BoosproPipeline:
fp = None
def open_spider(self,spider):
print("开始爬虫")
# 需要使用全局变量赋值
self.fp = open('./text.txt','w',encoding='utf-8')
def process_item(self, item, spider):
# 解析管道数据
text = item['text']
self.fp.write(text)
# 开启管道
return item
def close_spider(self,spider):
print("结束爬虫")
self.fp.close()
最后运行实现持久化存储