作为一个长期坐办公室的闲人来说,QQ游戏一度是我们的主要消磨时间的工具,当然现在改成python了,哈哈。
今天我们就来抓取下QQgame下所有游戏的页面地址和简介,然后分类保存本地吧!
这里我们用面向函数的模式试试写我们的爬虫。
首先是分析url,主页地址:http://qqgame.qq.com/,打开F12开发者工具,
这里我们可以看到有很多的分页,仔细看看就会发现主要是分2大块:热门游戏/最新游戏(这俩url竟然是一样的,腾讯的程序员你们是有多懒。。。)和分类游戏(棋牌、网页、单机、街机等等),其实只需要爬后者就可以,但是各个分类下游戏页面并不多,热门游戏里面有500多款呢,所以干脆一起抓取下来,然后分类保存就好!
找到游戏分类后,再进入随便一个分类页面,来看看网页构成。
非常简单的网页,这里我们可以很容易获取游戏的url和相关信息
我们提取中间的游戏名字,简介,链接就可以了(大型游戏并不在QQgame里面)。Ok,我们开工!
2、代码实现
这次我们用到了requests、time、random、json和lxml模块,其中我们的最终结果要保存为json文件,所以这里导入了json模块
构造一个函数作为主体函数main(),把url写入进去,新建一个空字典,用于接收相关信息,我们这次采用xpath模块来匹配相应标签内容,简单快捷。
最后5行是做为主程序执行,加入了开始和结束时间,用于统计用时,并显示出来
这里我们新建了2个函数,一个是get_html函数,用于获取网页源码,UA部分填写自己的就可以。在函数内做一个判断,如果没有访问成功则返回False,用于判断网页是否可访问!后面会多次用到。
还有一个就是save函数用于存储数据,它接收main函数传入的分类字典,字典内含有分类名字和url对应的各个元素,将key值取出做循环遍历字典,然后用dic[key]来取出对应的url。因为存在每个分类的翻页,所有在下面做一个while循环,并新建2个函数,1个获取当前页相应内容的函数,1个是获取下一页url的函数,用if判断,如果下一页存在,则继续循环,不存在则跳出循环并显示相应信息。然后将返回的页面信息写入文件!
注意while循环下先用if函数判断传入的url是否可访问,来决定是否执行获取信息!
Next_url函数获取下一页的url地址并返回!注意源码中下一页的跳转url是简写模式,需要加上前面的主页信息,但又不是‘’qqgame.qq.com“,这里是个大坑!
Get_game函数获取当前页面所有的相关信息,并保存到字典返回!
为了结果的美观,这里我们新建了3个字典,返回数据为{序号:{游戏名称:{游戏简介,游戏页面地址}}}的模式!
到这里,整个代码就写完了,我们运行并验证下吧!
3、运行结果!
开始运行
运行完毕,因为没有多少内容,所以速度还是很快的,30多秒完成!
保存的文件
记事本打开一个看看
乱码?不要着急,我们找个在线解析json的网页,看看内容是什么!将内容复制到网页的json数据中
点击视图
吼吼~!数据出来了有没有!我们去网页中找找看是否正确!
数据一致~!写完手工!
完整代码送上
领取专属 10元无门槛券
私享最新 技术干货