python3.6+BeautifulSoup4 爬取360手机助手app应用的信息并存储数据库 批量下载apk

本文主要是介绍python3.6+BeautifulSoup4 爬取360手机助手app应用的信息并存储数据库 批量下载apk,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码:
#/usr/bin/python
#encoding:utf-8
'''
Created on 2018年01月12日
@author: xianqingchen
'''
import requests
from bs4 import BeautifulSoup
import os
from urllib.request import urlopen
import pymysql
def GetAppinfo(urlhead,page):
head = {}   #设置头 
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'
#获取url路径
get_url=urlhead;
#模拟浏览器,定制http请求头
try:
appinfo_html=requests.get(url=get_url,headers = head)
# UTF-8模式读取获取的页面信息标签和内容
appinfo_xml=BeautifulSoup(appinfo_html.text,'lxml');
#获取应用中的所有分类的标签xml
appin_subcalssxml1=appinfo_xml.find_all('ul',{"class":"select"})
appin_subcalssxml2=appin_subcalssxml1[0].find_all('a')
except:
print("父类标签页面,出现异常,终止")
# 连接数据库
connect=pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='cecgw',
db='app',
charset='utf8'
)
# 获取游标
cursor = connect.cursor()
for appin_a in appin_subcalssxml2:
href=appin_a.get('href')
if href.find('/list/index/cid')==-1:
pass
else:
if href=='/list/index/cid/1/':
pass
else:
appsubclassname=appin_a.get_text()
for page in range(1,page+1):
dict1={}
try:
appin_subclaurl='http://zhushou.360.cn'+href+'?page='+str(page)
appinfo_html=requests.get(url=appin_subclaurl,headers = head)
appinfo_xml=BeautifulSoup(appinfo_html.text,'lxml');
appinfo_appullist=appinfo_xml.find_all('ul',{'class','iconList'})
appinfo_applilist=appinfo_appullist[0].find_all('li')
except:
print("appsubcalss exception",appin_subclaurl)
for appinfo_appxml in appinfo_applilist:
applinkt1=appinfo_appxml.find_all('h3')[0]
app_name=applinkt1.get_text()
apphref=applinkt1.find_all('a')[0].get('href')
#app的详情的url
appurl='http://zhushou.360.cn'+apphref
#                         print(appurl)
applinka=appinfo_appxml.find_all('a')
for applinkaa in applinka:
appa=applinkaa.get('class')
try:
if appa is not None:
if len(appa)==3:
if appa[2].find('normal')==-1:
pass
else:
#app的下载url
app_loadurl=applinkaa.get('href').split('url=')[1]
#                                         appDownload(app_loadurl)
#获取app详情的页码的xml           
appdeinfo_html=requests.get(url=appurl,headers = head)
appdeinfo_xml=BeautifulSoup(appdeinfo_html.text,'lxml');
appdepf=appdeinfo_xml.find_all('div',{'class':'pf'})[0]
appdebreif=appdeinfo_xml.find_all('div',{'class':'breif'})[0]
except:
print("appdeinfo  exception",appurl)
#app的详情
appscore=appdepf.find_all('span')[0].get_text()
appscounts=appdepf.find_all('span')[3].get_text().split(':')[1]
appsize=appdepf.find_all('span')[4].get_text()
appauthor=appdebreif.find_all('td')[0].get_text().split(':')[1]
appdate=appdebreif.find_all('td')[1].get_text().split(':')[1]
appver=appdebreif.find_all('td')[2].get_text().split(':')[1]
appsyst=appdebreif.find_all('td')[3].get_text().split(':')[1]
applan=appdebreif.find_all('td')[4].get_text().split(':')[1]
data=(appsubclassname,app_name,appscore,appscounts,appsize,appauthor,appdate,
appver,appsyst,applan,appurl,app_loadurl) 
try:                      
# 插入数据
sql ="""INSERT INTO AppInfo(subclass, appname, score,counts,size,author,update1,version,supsystem,language1,appurl,loadurl) VALUES( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )"""
cursor.execute(sql % data)
connect.commit()
except:
print('数据库存储异常',data)
break;
break;
# 关闭连接
cursor.close()
connect.close()
def appDownload(url):
file_name=url.split('/')[-1].strip()
u = urlopen(url)
path=os.path.abspath("..")+'/pak/'
f = open(path+file_name, 'wb')
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
f.write(buffer)
f.close()
print ("Sucessful to download" + " " + file_name)
if __name__ == '__main__':
url='http://zhushou.360.cn/list/index/cid/1/';
page=1
app_dict=GetAppinfo(url,page)
下载结果:

这篇关于python3.6+BeautifulSoup4 爬取360手机助手app应用的信息并存储数据库 批量下载apk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848089

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1