欢迎使用CSDN-markdown编辑器

应用宝爬虫原理

导语

本程序旨在实现对 应用宝 网站中的所有APP信息进行爬取,

一:主要思路

首先,对要爬取的网站进行分析:目标网站 应用宝 是个静态网站,而且需要下拉才会加载后续的软件,通过浏览器的分析工具分析网站的请求过程,并在网络监视器中观察得知每次加载更多时,请求的URL是有规律的,例如http://sj.qq.com/myapp/cate/appList.htm?orgame=1&categoryId=0&pageSize=20&pageContext=40,在全部软件的分项里,每次加载后,只有pageContext的参数会变,而且除了第一次加载40个软件,之后每次加载都是20软件,相应的加载软件的多少与pageContext参数的取值有直接关系。

另外,该网址请求的数据为JSON格式,这样问题转化为获取JSON数据,并解析出来。通过对网站的分析关于每个软件的名称,版本号,包名,下载量,评分等数据在网响应过程中都存在于响应时的JSON数据中,如此抓取数据的过程就比较简单了。

二:重要代码分析

  1. 获取目标网站,并用该网站的消息请求头伪造,同时设置变量ADD_NUM动态改变pageContext的值:

    ADD_NUM = 0
    UPLOAD_URL='http://sj.qq.com/myapp/cate/appList.htm?orgame=1&categoryId=0&pageSize=20&pageContext='
    current_url = UPLOAD_URL + str(ADD_NUM)
    request = requests.get(current_url, headers=HEAD)
    
  2. Python的Requests模块有一个内置的JSON解码器,获取JSON响应内容:

    home_page_json = request.json()
    
  3. 观察得知:只要加载内容未完,响应里的count内容就必定大于0,由此为控制条件,且获取的JSON响应内容已经转化为Python的字典型数据了,直接通过键值对获取:

    if home_page_json['count'] > 0:
        for item in home_page_json['obj']:
            app_name = item['appName']
            app_version = item['versionName']
            app_mark = item['averageRating']
            app_download_num = item['appDownCount']
            app_package_name = item['pkgName']
    
  4. 由于响应内容没有关于软件的详细信息,只能进入软件页获取,这时我用了Python里的Beautiful Soup模块,该模块可以解析网页,并提供定位内容的便捷接口,而每个软件页的URL也是有规律的,即http://sj.qq.com/myapp/detail.htm加上软件的包名作为参数:

    payload = {'apkName': app_package_name}
    detail_request = requests.get('http://sj.qq.com/myapp/detail.htm', params = payload)
    soup = BeautifulSoup(detail_request.text,"html.parser")
    info=soup.select('.det-app-data-info')[0]
    
    for item2 in info.children:
        while item2.next != None:
            if item2.name == None:
                app_info += item2.replace('\r', ' ')
                item2 = item2.next
            else:
                break
    
  5. 最后将数据存储进指定csv文件中。

三:其他思路及总结

思路2:
可以用BeautifulSoup模块直接在每个软件页直接抓取信息,但这种方法抓取的评分和下载量只是大致的数据,并不是具体数据,而且要考虑不同的信息在不同的标签中,较为麻烦,最为最初的实现方法相比较而言我选择后者。

两种思路的比较:在效率方面第二种方法应该会快一点,因为第一种方法在获取软件详细信息时还是要经过BeautifulSoup这个步骤的,但第一种方法简单,一目了然,且爬取的数据量不大,效率对比的差距不会很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值