爬虫框架Scrapy 之(四) --- scrapy运行原理(管道…
2019-04-29 08:52:54来源:博客园 阅读 ()
解析后返回可迭代对象
- 这个对象返回以后就会被爬虫重新接收,然后进行迭代
- 通过scrapy crawl budejie -o xx.josn/xx.xml/xx.csv 将迭代数据输出到json、xml或者csv格式的外部文件中
- 如果管道开启,则每迭代一次数据就会将其输入到管道中(在settings文件中可以开启管道)
1. budejie.py 文件
1 def parse(self, response): 2 # 这个函数是解析函数,它是通过下载来回调,下载器下载完成一个url数据以后就会回调这个函数并且把下载的响应对象通过response参数传递过来 3 print(response)
4 # 解析response 5 contents = response.xpath("//div[@class='j-r-list']/ul/li") # scrapy中自带xpath和css两种解析方法 6 # print(contents) 7 for content in contents: 8 item = {} 9 item["author"] = content.xpath(".//a[@class='u-user-name']/text()").extract()[0] 10 # scrapy的xpath和css方法中返回出来的是一个Selector对象列表,我们需要用extract函数将内容从这个对象中提取出来 11 item["authorImg"] = content.xpath(".//img[@class='u-logo lazy']/@data-original").extract()[0] 12 item["content"] = content.xpath(".//div[@class='j-r-list-c-desc']/a/text()").extract()[0] 13 item["imgSrc"] = content.xpath(".//img[@class='lazy']/@data-original").extract()[0] 14 # print(item)
15 yield item # 每一个解析函数最后都要返回出去一个可迭代的对象 16 # 这个对象返回以后就会被爬虫重新接收,然后进行迭代 17 # 通过scrapy crawl budejie -o xx.josn/xx.xml/xx.csv 将迭代数据输出到json、xml或者csv格式的外部文件中 18 # 如果管道开启,则每迭代一次数据就会将其输入到管道中(在settings文件中可以开启管道)
开启管道,将迭代的对象传入管道
- 在setting.py 文件中开启管道(67--69行)
1 ITEM_PIPELINES = { 2 'MyFirstScrapy.pipelines.MyfirstscrapyPipeline': 300, 3 # settings文件中可以配置相关的组件,其中ITEM_PIPELINES就是其中的一种组件(即管道组件),管道组件的值是一个字典,代表可以设置多个值 4 # 字典中的一个键值对就代表着一个管道组件,键代表当前管道组件的位置,值代表当前管道组件的优先级(数字越小优先级越大) 5 6 # 数据会按照管道优先级,从高向低传递 7 'MyFirstScrapy.pipelines.CSVPipeline': 200 8 9 }
MyfirstscrapyPipeline 管道类
- 在pipelines.py 文件中 声明、设置管道类
1 class MyfirstscrapyPipeline(object): 2 # 这个类集成自一个普通类,但是如果我们把它加入到管道组件中就变成了一个管道类 3 4 # 一个管道类有以下三个生命周期函数 5 def open_spider(self,spider): 6 print("爬虫开启") 7 print("当前开启的爬虫为:",spider) 8 # 创建一个redis链接 9 self.rds = redis.StrictRedis(host="www.fanjianbo.com",port=6379,db=8) 10 11 def process_item(self, item, spider): 12 # 当爬虫解析完数据以后,这个方法去迭代返回到管道中数据 13 print("爬虫正在迭代数据...") 14 print("当前正在%s爬虫迭代的数据是:%s"%(spider,item)) 15 # 向redis数据库中存入数据 16 self.rds.lpush("budejie",item) 17 return item 18 # 每迭代一次以后,一定将迭代过的数据return出去 19 20 def close_spider(self,spider): 21 print("爬虫%s关闭!"%spider) 22 23 24 25 # 声明一个管道类,用于写csv数据 26 class CSVPipeline(object): 27 def open_spider(self,spider): 28 # 打开csv文件 29 self.csvfile = open("data.csv","a+",newline='',encoding="utf-8") 30 self.writer = csv.writer(self.csvfile) 31 self.writer.writerow(["author","authorImg","content","imgSrc"]) 32 33 def process_item(self,item,spider): 34 vals = [] 35 for k,v in item.items(): 36 vals.append(v) 37 self.writer.writerow(vals) 38 return item 39 # 如果优先级高的管道跌打完数据以后不返回出去, 40 # 这个数据就会销毁,后面的管道就无法使用该数据 41 42 def close_spider(self,spider): 43 self.csvfile.close()
原文链接:https://www.cnblogs.com/TMMM/p/10777625.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:01.计算机基础知识
- 小白如何入门 Python 爬虫? 2019-08-13
- python day2-爬虫实现github登录 2019-08-13
- 使用scrapy框架爬取全书网书籍信息。 2019-08-13
- python爬虫学习之爬取超清唯美壁纸 2019-08-13
- python爬虫学习之用Python抢火车票的简单小程序 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash