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