Python爬取APP下载链接的实现方法
作者:CaptainXero 发布时间:2022-04-10 02:12:27
首先是准备工作
Python 2.7.11:下载python
Pycharm:下载Pycharm
其中python2和python3目前同步发行,我这里使用的是python2作为环境。Pycharm是一款比较高效的Python IDE,但是需要付费。
实现的基本思路
首先我们的目标网站:安卓市场
点击【应用】,进入我们的关键页面:
跳转到应用界面后我们需要关注三个地方,下图红色方框标出:
首先关注地址栏的URL,再关注免费下载按钮,然后关注底端的翻页选项。点击“免费下载”按钮就会立即下载相应的APP,所以我们的思路就是拿到这个点击下载的连接,就可以直接下载APP了。
编写爬虫
第一个需要解决的点:我们怎么拿到上面说的下载链接?这里不得不介绍下浏览器展示网页的基本原理。说简单点,浏览器是一个类似解析器的工具,它得到HTML等代码的时候会按照相应的规则解析渲染,从而我们能够看到页面。
这里我使用的是谷歌浏览器,对着页面右键,点击“检查”,可以看到网页原本的HTML代码:
看到眼花缭乱的HTML代码不用着急,谷歌浏览器的审查元素有一个好用的小功能,可以帮我们定位页面控件对应的HTML代码
位置:
如上图所示,点击上方矩形框中的小箭头,点击页面对应的位置,在右边的HTML代码中就会自动定位并高亮。
接下来我们定位到下载按钮对应的HTML代码:
可以看到按钮对应的代码中,存在相应的下载链接:【/appdown/com.tecent.mm】,加上前缀,完整的下载链接就是 http://apk.hiapk.com/appdown/com.tecent.mm
首先使用python拿到整个页面的HTML,很简单,使用“requests.get(url)
” ,url填入相应网址即可。
接着,在抓取页面关键信息的时候,采取“先抓大、再抓小”的思路。可以看到一个页面有10个APP,在HTML代码中对应10个item:
而每个 li 标签中,又包含各自APP的各个属性(名称、下载链接等)。所以第一步,我们将这10个 li 标签提取出来:
def geteveryapp(self,source):
everyapp = re.findall('(<li class="list_item".*?</li>)',source,re.S)
#everyapp2 = re.findall('(<div class="button_bg button_1 right_mt">.*?</div>)',everyapp,re.S)
return everyapp
这里用到了简单的正则表达式知识
提取 li 标签中的下载链接:
def getinfo(self,eachclass):
info = {}
str1 = str(re.search('<a href="(.*?)">', eachclass).group(0))
app_url = re.search('"(.*?)"', str1).group(1)
appdown_url = app_url.replace('appinfo', 'appdown')
info['app_url'] = appdown_url
print appdown_url
return info
接下来需要说的难点是翻页,点击下方的翻页按钮后我们可以看到地址栏发生了如下变化:
豁然开朗,我们可以在每次的请求中替换URL中对应的id值实现翻页。
def changepage(self,url,total_page):
now_page = int(re.search('pi=(\d)', url).group(1))
page_group = []
for i in range(now_page,total_page+1):
link = re.sub('pi=\d','pi=%s'%i,url,re.S)
page_group.append(link)
return page_group
爬虫效果
关键位置说完了,我们先看下最后爬虫的效果:
在TXT文件中保存结果如下:
直接复制进迅雷就可以批量高速下载了。
附上全部代码
#-*_coding:utf8-*-
import requests
import re
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class spider(object):
def __init__(self):
print u'开始爬取内容'
def getsource(self,url):
html = requests.get(url)
return html.text
def changepage(self,url,total_page):
now_page = int(re.search('pi=(\d)', url).group(1))
page_group = []
for i in range(now_page,total_page+1):
link = re.sub('pi=\d','pi=%s'%i,url,re.S)
page_group.append(link)
return page_group
def geteveryapp(self,source):
everyapp = re.findall('(<li class="list_item".*?</li>)',source,re.S)
return everyapp
def getinfo(self,eachclass):
info = {}
str1 = str(re.search('<a href="(.*?)">', eachclass).group(0))
app_url = re.search('"(.*?)"', str1).group(1)
appdown_url = app_url.replace('appinfo', 'appdown')
info['app_url'] = appdown_url
print appdown_url
return info
def saveinfo(self,classinfo):
f = open('info.txt','a')
str2 = "http://apk.hiapk.com"
for each in classinfo:
f.write(str2)
f.writelines(each['app_url'] + '\n')
f.close()
if __name__ == '__main__':
appinfo = []
url = 'http://apk.hiapk.com/apps/MediaAndVideo?sort=5&pi=1'
appurl = spider()
all_links = appurl.changepage(url, 5)
for link in all_links:
print u'正在处理页面' + link
html = appurl.getsource(link)
every_app = appurl.geteveryapp(html)
for each in every_app:
info = appurl.getinfo(each)
appinfo.append(info)
appurl.saveinfo(appinfo)
总结
选取的目标网页相对结构清晰简单,这是一个比较基本的爬虫。代码写的比较乱请见谅,以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有问题大家可以留言交流。
来源:http://www.jianshu.com/p/580e7e70a955
猜你喜欢
- 前言当今,随着计算机技术的发展,摄像头已经成为了人们生活中不可或缺的一部分。而Python作为一种流行的编程语言,也可以轻松地控制和操作摄像
- 基于TCP协议的套接字编程实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件# 服务端import socket# 1. 符合T
- python读取npz/npy文件npz和npy文件都可以直接使用numpy读写。import numpy as npac = np.loa
- 本文为大家分享了机器学习10大经典算法,供大家参考,具体内容如下1、C4.5C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是I
- 本文实例讲述了django框架事务处理。分享给大家供大家参考,具体如下:django 中要求事务处理的情况有两种:1.基于django or
- 这是第二天了,工作之余和女朋友一起学Python3,代码都是她敲的,有点辣眼睛,仅做参考。1.题目:输入“姓名”,输出“你好,姓名”有关安装
- NumPy提供了多种存取数组内容的文件操作函数。保存数组数据的文件可以是二进制格式或者文本格式。二进制格式的文件又分为NumPy
- 简介:单例模式可以保证一个类仅有一个实例,并提供一个访问它的全局访问点。适用性于当类只能有一个实例而且客户可以从一个众所周知的访问点访问它,
- 最新的CentOS8已经内置了Python2和Python3,出入Python2和Python3两个命令可以分别进入Python2和Pyth
- Python来进行查询和替换一个文本字符串?可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, s
- 笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF。比如,需要把Python字符串‘这是测试文件'生成为P
- Selenium的介绍、配置和调用Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具。Selenium测
- 简易网页搜集器前面我们已经学会了简单爬取浏览器页面的爬虫。但事实上我们的需求当然不是爬取搜狗首页或是B站首页这么简单,再不济,我们都希望可以
- 前段时间开始学习JSON在ASP中的使用,JSON确实比XML方便。以前在写程序的时候有考虑使用XML来存储数据,但是一直觉得生成文档及文档
- 本文实例讲述了PHP依赖注入原理与用法。分享给大家供大家参考,具体如下:引言依然是来自到喜啦的一道面试题,你知道什么是依赖注入吗?依赖注入(
- python安装教程和Pycharm安装详细教程,分享给大家。首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址h
- 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方
- request库是python的第三方库,它也是目前公认的爬取网页最好的第三方库,其特点是:简单、简洁,甚至用一行代码就能从网页上获取相关资
- 如下所示:Numpy中reshape的使用方法为:numpy.reshape(a, newshape, order='C')
- 数据import numpy as npimport pandas as pddata = [{'Name': '小