python爬虫深度嵌套爬取所有手机信息

本爬虫代码详细代码和解释在github:https://github.com/chenhanwu1998/python-climb-mobile-information.git ,一下展开讨论。
一、首先找到对应的手机排行网站http://top.zol.com.cn/compositor/57/manu_attention.html,
爬取其品牌,品牌综合评分,占有率,好评率以及价格区间还有手机主页url链接(在手机品牌logo图标下),得到一个mobile_type.csv表格存储所有的前50的品牌手机主页url及粗略品牌信息。
在这里插入图片描述
在这里插入图片描述
该过程通过一个m_type类实现

class m_type:
    def __init__(self):
        self.mobile_brand_url = 'http://top.zol.com.cn/compositor/57/manu_attention.html'
        self.root_pattern="//div[@class='main']//div[@class='rank-list brand-rank-list']//div[@class='rank-list__item clearfix']"
        self.brand_url=[]    #存放品牌url
        self.brand_name = []   #存放品牌名字
        self.score_list = []	#存放手机品牌得分
        self.occupancy_list = []	#品牌占有率
        self.evaluate_list = []	#品牌好评率
        self.low_price = []	#低价
        self.high_price = []    #高价
def get_brand_url(self,html):
	pass
def get_brand_name(self,html):
	pass
def get_score(self,html):
	pass
def get_occupancy(self,html):
	pass
def get_evaluate(self,html):
	pass
def get_price(self,html):  
	pass
def get_amount(self,html):
	pass
def climb_m_type(self): #主调动函数
	pass

二、
通过读取mobile_type.csv文件的url列表,
打开手机主页链接,如:http://detail.zol.com.cn/cell_phone_index/subcate57_1673_list_1.html
在这里插入图片描述
再次嵌套爬取手机具体的位置url,以及粗略的手机描述,通过一个gzc_mobile类进行分析和抓取

class zgc_mobile:
    def __init__(self):
        self.detail_root= 'http://detail.zol.com.cn'  # 用来拼接成完整的链接的
        self.data = pd.read_csv(data_path)
        self.brand = self.data['品牌']
        self.mobile_url = self.data['url']
        self.m_url_list = []
        self.m_id_list = []
        self.m_type_list = []
        self.m_ref_price_list = []
        self.m_descript_list = []
        self.m_score_list = []
        self.m_evaluate_url_list = [] 
        self.mobile_com=[]
        self.verbose=1
def get_mobile_id(self,m_url_list):  #获取手机id
def get_mobile_type(self,html):   #获取手机型号
def get_mobile_reference_price(self,html):  #获取参考价格
def get_mobile_descript(self,html):  #获取粗略的手机描述
def get_mobile_score(self,html):	#获取手机得分
def run_reptile(self,verbose):  #主调动函数

然后就羞嗒嗒的跑起来了,很beautiful。
在这里插入图片描述

三、哦还差了最终获取详细参数和评论的一个类mobile_param_evaluate

class mobile_param_evaluate:
    def __init__(self):
        self.data = pd.read_csv(data_path)
        self.brand_list = self.data['品牌']
        self.detail_root = 'http://detail.zol.com.cn'
        self.params_dic = {'id': [],  'CPU':[],'上市日期': [], '主屏尺寸': [], '主屏分辨率': [], '后置摄像头': [], '前置摄像头': [], '电池容量': [], '电池类型': [],
                      '核心数': [], '内存': [], 'param_url': []}
        self.evaluate_dic = {'id': [],'性价比': [], '性能': [], '续航': [], '外观': [], '拍照': [], '4-5星': [], '3-4星': [], '2-3星': [],
                        '1-2星': [], 'score': [], 'descript': [], 'evaluate_url': []}
        self.temp_params_dic = {'id': 'None', 'CPU': 'None', '上市日期': 'None', '主屏尺寸': 'None', '主屏分辨率': 'None', '后置摄像头': 'None', '前置摄像头':'None',
                           '电池容量':'None', '电池类型': 'None',
                           '核心数': 'None', '内存': 'None', 'param_url': 'None'}
        self.temp_evaluate_dic = {'id': 'None', '性价比': 'None', '性能': 'None', '续航': 'None', '外观': 'None', '拍照': 'None', '4-5星': 'None', '3-4星': 'None',
                             '2-3星':'None',
                             '1-2星': 'None', 'score': 'None', 'descript': 'None', 'evaluate_url': 'None'}
        self.verbose=1
def get_mobile_param(self,param_url):   #获取手机上市日期和cpu型号
def get_mobile_detail_param(self,html):			#获取主屏尺寸,分辨率等详细参数
def get_eva_score(self,html):		#获取性价比,性能等评价指标的得分
def get_xin_score(self,html):		#获取评价后一星两星三四五星的占比
def get_score(self,html):			#获取手机评价最终得分
def get_descript(self,html):			#获取手机客户的评价综合描述
def get_mobile_evaluate(self,evaluate_url):	#获取手机总的评价信息
def get_mobile_id(self,m_url):
def check_dic(self):     #检查主存储字典的长度
def clear_dic(self):		#清楚主存储字典
def clear_temp_dic(self):		#清楚临时存储字典
def run_climb(self,verbose):		#主调动函数

这里爬取的详细参数主要是这一块:
http://detail.zol.com.cn/cell_phone/index1182639.shtml
还有这里1182639是唯一的,可以用作为手机的id写入数据存储,方便之后导入数据库使用。
在这里插入图片描述
和这一块(有的新网站格局改变了,但这两块都是一个函数获取的,由get_mobile_detail_param获取,内部做个两个xpath爬取机制,以及葛各种数据操作清洗)
在这里插入图片描述

获取详细参数后就来参数页面获取一下其他比如cpu和上市日期等这些参数,这有函数get_mobile_param实现,同样由于样式各异问题,流函数里面采取了各种处理机制,详细见github
在这里插入图片描述
参数数据如图:
在这里插入图片描述

爬取点评信息,通过函数get_mobile_evaluate实现,此函数包装了前面的小功能函数。
在这里插入图片描述
评价数据如图:
在这里插入图片描述

四、
最后把所有的存储信息的路径初始化到param.py里面,再通过main.py进行包装那么我们只需要一点,三只小爬虫就羞羞的爬起来了,然后所有手机信息就在你手里了。

from reptile_project.gzc_climb import mobile_type
from reptile_project.gzc_climb import evaluate_param
from reptile_project.gzc_climb import zgc_mobile
if __name__ == '__main__':
    mobile_type = mobile_type.m_type()
    mobile_type.climb_m_type()

    zgc_reptile = zgc_mobile.zgc_mobile()
    zgc_reptile.run_reptile(verbose=0)

    mobile_reptile = evaluate_param.mobile_param_evaluate()
    mobile_reptile.run_climb(verbose=0)

在这里插入图片描述
五、总结
这三只小爬虫最后一只最慢,因为爬取的信息小比较多,遍历了所有的手机网站,由于没有开线程,所有慢点hh。一路上坑很多,笔者流血不止。那么我们这些数据可以做点啥呢,可以看看我之前的博客上的web手机网站开发hh。做了一些数据可视化等等等等等等。

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值