欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
今天这篇文章主要是分享两个技术点。
第一:翻页数据如何处理;
第二:构建一个db pipeline来获取数据并入库。
第一部分:翻页处理
在前面的文章中已经能够正常的提取我们想要的页面数据了,但是这只是一个页面想要的数据,如果是有很多页面的数据要处理,我们如何来爬取了。
1 2 page=1 3 start_urls=[] #这个是scrapy框架中定义好的,不可以修改 4 while (page < 7): #根据自身爬取的页面来定义 5 print("the page is:", page) 6 url = 'http://lab.scrapyd.cn/page/' + str(page) #对翻页的链接进行拼接 7 start_urls.append(url) #追加到上面定义好的列表中去 8 page += 1 #好让循环可以退出 9 10 def parse(self, response): 11 items=LabItem() 12 for sel in response.xpath('//div[@class="col-mb-12 col-8"]'): 13 print(sel) 14 for i in range(len(sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()'))): 15 title = sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()')[i].get() 16 author = sel.xpath('//div[@class="quote post"]//small[@class="author"]/text()')[i].get() 17 items["title"]=title 18 items["author"] = author 19 yield items
源码中会不断的遍历start_urls这个列表里面的链接地址,并向这个列表里面的链接地址发出request请求,拿到response后再来解析页面数据,源码如下图所示:
第二部分:db pipeline 数据处理
Step1: 创建数据库与表,如下图所示
Step2: 创建sqlitePipeline类并配置setting.py文件
1 2 sqlitePipeline类代码如下: 3 class sqlitePipeline(object): 4 5 def __init__(self): 6 print("当爬虫执行开始的时候回调:open_spider") 7 self.conn = sqlite3.connect("test.db") 8 self.cur = self.conn.cursor() 9 self.table=''' 10 create TABLE IF NOT EXISTS scrapy0725( 11 id INTEGER PRIMARY KEY AUTOINCREMENT, 12 `author` varchar(255) DEFAULT NULL, 13 `title` varchar(2000) DEFAULT NULL 14 ); 15 ''' 16 self.cur.execute(self.table) 17 18 19 def process_item(self, item, spider): 20 print("开始处理每一条提取出来的数据==============") 21 # content = json.dumps(dict(item),ensure_ascii=False)+" " 22 content = dict(item) 23 print("*" * 100) 24 insert_sql="INSERT INTO scrapy0725 (author,title) VALUES ('"+str(content['author']).replace("'","")+"','"+str(content['title']).replace("'","")+"')" 25 print(insert_sql) 26 print("*"*100) 27 self.cur.execute(insert_sql) 28 self.conn.commit() 29 print("*"*100) 30 return item 31 32 def close_spider(self, spider): 33 sql = "select * from scrapy0725" 34 result=self.cur.execute(sql) 35 for res in result: 36 print(res) 37 self.cur.close() 38 self.conn.close() 39 print("当爬虫执行结束的时候回调:close_spider") 40 41 setting.py 配置如下: 42 ITEM_PIPELINES = { 43 'lab.pipelines.sqlitePipeline':500, 44 # 'lab.pipelines.FilePipeline': 300, 45 }
Step3: 执行此命令 scrapy crawl labs
Step4: 查询数据库是否insert成功,如下图所示:
总结:Python + Scrapy爬虫的文章暂时就分享到这里,Scrapy的爬虫效率还是不错的,大家动手开始实践吧。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!