前几天有位朋友向我求助,想让我写个爬虫帮他爬取基金的数据。乐于助人的我怎么会袖手旁观呢?首先捋一捋思路:获取网页→获取一条数据→获取所有数据→把数据保存为文件。有了思路就开干喽~朋友须要获取的数据来源于每天基金网的基金排行页,先来观察一下它的结构。每个基金都在一行,翻页可获取下一页基金。ajax
获取数据正则表达式
先试试能不能用requests库直接获取数据吧。浏览器
emmm。。。看来是编码不对,改一下编码试试。在浏览器按F12查看一下网页是什么编码的。框架
换一个编码后就行了。接下来获取一条数据,观察一下网页的代码,基金的代码在a标签里,此次使用xpath来获取数据。(不会使用xpath的小伙伴能够戳这里)ide
嗯?怎么会没有数据呢?代码应该没错的鸭QAQ。。。在屡次尝试仍然没有获取到数据后只好去求助小哥哥了。。。
编码
小哥哥说这多是网页使用ajax技术来获取数据的,网页原本只是个框架,因此requests获取的网页没有数据。在网上查阅资料后,我终于弄懂是怎么回事了。网页就是一个框架,每次获取数据后(例如翻页)就把数据更新到预约的地方(红色框部分),这样就不用从新加载网页。spa
小哥哥教我在浏览器按F12后再按网页的翻页按钮,就能看到请求的网址,用requests库就能获取数据了。3d
无访问权限。。。看来被识别到是爬虫了,加个请求头试试。blog
数据获取到了,用eval()加正则表达式把数据提取出来。图片
获取所有数据
接下来写个循环获取所有数据。根据观察,pi这个参数就是页数,使用字符串格式化的方法便可获取所有数据。
把数据保存为文件
数据都获取到了,最后就是把它们保存到文件里,这里选择保存为csv格式。