① Python网络爬虫5 - 爬取QQ空间相册
自毕业后,就再也没有使用过QQ,QQ空间里记录的是一段段不那么精彩的青春时光,但它们却是不可多得的回忆。近日,我决定学以致用,利用Python将QQ空间相册的所有照片爬取下来,以作备份。
分析QQ空间时,首先需要了解登录QQ空间的步骤。最初的设想是通过requests库配置登录请求,模拟登录过程,但很快便放弃了这一思路。通过观察登录按钮绑定的监听事件,我们可以追踪到按钮的点击事件。账号加密是必然的,对于这一堆复杂的代码,耐心的勇士可以尝试解析,但显然这不是最高效的方法。
因此,选择使用selenium模拟用户登录成为了一种更为省时省力的选择。我们仅需要通过selenium完成登录过程,获取到Cookies和g_tk参数后即可停止使用,效率并不低。
登录后,页面会跳转至 user.qzone.qq.com/{QQ_NUMBER}。这时,鼠标移到导航栏,会发现所有的导航栏链接都是javascript:;。这正是暗箱操作的陷阱。不过,这并不难处理,通过调试工具捕获点击后产生的请求,然后过滤出正确的请求包即可。网络包数量众多,那么如何过滤呢?可以猜想相册数据的API必然返回一个列表list,尝试过滤list并逐一排除,最后定位到请求包。通过fcg_list过滤后的数据包,列表信息以jsonp格式返回,稍作处理即可作为json格式读取。
从Headers和Response中可以分别获取到两组重要信息。先看请求包,其中hostUin、uin都是QQ号,g_tk是每次重新登录都会更新的参数,其它有些参数不是必须的,通过尝试整理出如下请求参数。
接下来看jsonp格式的跨域响应包,shine0_Callback是请求包的callbackFun参数决定的,如果没这个参数,响应包会以_Callback作为默认名。所有相册信息以json格式存入albumListModeSort中,上面只截取了一个相册的信息。相册信息中,name代表相册名称,id作为唯一标识可用于请求该相册内的照片信息,而pre仅仅是一个预览缩略图的链接,无关紧要。
分析单个相册时,与获取相册信息类似,进入某一相册,使用cgi_list过滤数据包,找到该相册的照片信息。同样的道理,根据数据包可以获取照片列表信息的请求包和响应信息。先看请求,其中有几个关键参数。为了获取所有照片,可以将pageStart设为0,pageNum设为所有相册所含照片的最大值。同样可以简化参数,在相册列表请求参数的基础上添加topicId、pageStart和pageNum三个参数即可。下面来看返回的照片列表信息,返回的照片信息都存于photoList,上面只截取了一张照片的信息,后面一部分返回的是当前相册的一些基本信息。totalInAlbum、totalInPage存储了当前相册总共包含的照片数及本次返回的照片数,而我们需要下载的图片链接则是url。
至此,所有请求和响应数据都已分析清楚,接下来便是Coding的阶段。确定爬取方案时,创建qqzone类以模拟登录过程。获取Cookies时,使用selenium获取非常方便。获取g_tk则需要解决本爬虫的最大难点,因为从网页中无法找到直接写明的数值,只有各种函数调用。通过全局搜索,发现有多种获取方式,最终选择了其中一处,通过selenium执行脚本的功能成功获取到了g_tk!至此,selenium的使命就完成了,剩下的将通过requests来完成。
接下来需要逐步生成请求并获取数据,为了方便起见,使用会话的方式请求数据,配置好cookie和headers,避免每次请求都设置一遍。获取相册信息时,需要封装好请求参数,然后通过session.get爬取数据,再通过正则匹配以json格式读取jsonp数据,最后解析所需的信息。获取相册列表后,逐个请求照片列表信息,进而逐一下载。下载图片也是通过request,记得设置超时时间。
爬取测试阶段,确保一切顺利进行。至此,利用Python爬取QQ空间相册的过程已经完成。
② 如何通过网络爬虫爬取appannie的排行榜数据
爬取网络数据时,面临需要登录的网站有两个主要策略:模拟登录和使用登录后的Cookie。首先,让我们探讨模拟登录的方法。通过Firefox或Chrome等浏览器,可轻松发现登录过程往往涉及向特定网址POST提交参数,例如 /www.appannie.com/account/login/> 。需要的参数包括用户名、密码以及CSRF令牌。CSRF令牌通常隐藏在网页源码中的一个input标签中,可以通过正则匹配或使用库如BeautifulSoup解析HTML获取。Python中的requests库提供了一个方便的解决方案,用于保持登录状态并管理Cookie。
另一种方法是直接使用登录后的Cookie。通过在网页上使用你的账号密码登录,然后查看浏览器开发者工具中获取到的Cookie。接下来,将这些Cookie整合到你的代码中即可。观察网页,Cookie有效期约为两周,这意味着与手动更新Cookie相比,此方法在长期使用时更具优势,避免了频繁更新Cookie的繁琐操作。
总结以上策略,根据需求和使用场景选择合适的登录方法。模拟登录适用于需要频繁操作的场合,而使用登录后的Cookie则适合长期稳定使用的情况。通过合理运用这两种方法,你可以有效地获取App Annie排行榜数据或其他需要登录访问的网站信息。
③ 如何爬虫网页数据
爬取网页数据原理如下:
如果把互联网比作蜘蛛网,爬虫就是蜘蛛网上爬行的蜘蛛,网络节点则代表网页。当通过客户端发出任务需求命令时,ip将通过互联网到达终端服务器,找到客户端交代的任务。一个节点是一个网页。蜘蛛通过一个节点后,可以沿着几点连线继续爬行到达下一个节点。
简而言之,爬虫首先需要获得终端服务器的网页,从那里获得网页的源代码,若是源代码中有有用的信息,就在源代码中提取任务所需的信息。然后ip就会将获得的有用信息送回客户端存储,然后再返回,反复频繁访问网页获取信息,直到任务完成。