Python如何爬取猫咪网站交易数据
这期内容当中小编将会给大家带来有关Python如何爬取猫咪网站交易数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
一、前言
看到可爱的猫咪表情包,总是会忍不住收藏,晒部分图如下:
从这个网站里爬取了猫猫品种介绍的数据,以及 20W+ 条猫猫交易数据,以此来了解一下可爱的猫咪。
二、数据获取
打开猫猫交易网,先爬取猫咪品种数据,打开页面可以看到猫猫品种列表:
检查网页,可以发现网页结构简单,容易解析和提取数据。爬虫代码如下:
import requestsimport reimport csvfrom lxml import etreefrom tqdm import tqdmfrom fake_useragent import UserAgent# 随机产生请求头ua = UserAgent(verify_ssl=False, path='fake_useragent.json')def random_ua(): # 用于随机切换请求头 headers = { "Accept-Encoding": "gzip", "Accept-Language": "zh-CN", "Connection": "keep-alive", "Host": "www.maomijiaoyi.com", "User-Agent": ua.random } return headersdef create_csv(): # 创建保存数据的csv with open('./data/cat_kind.csv', 'w', newline='', encoding='utf-8') as f: wr = csv.writer(f) wr.writerow(['品种', '参考价格', '中文学名', '别名', '祖先', '分布区域', '原产地', '体型', '原始用途', '今日用途', '分组', '身高', '体重', '寿命', '整体', '毛发', '颜色', '头部', '眼睛', '耳朵', '鼻子', '尾巴', '胸部', '颈部', '前驱', '后驱', '基本信息', 'FCI标准', '性格特点', '生活习性', '优点/缺点', '喂养方法', '鉴别挑选'])def scrape_page(url1): # 获取HTML网页源代码 返回文本 response = requests.get(url1, headers=random_ua()) # print(response.status_code) response.encoding = 'utf-8' return response.textdef get_cat_urls(html1): # 获取每个品种猫咪详情页url dom = etree.HTML(html1) lis = dom.xpath('//div[@class="pinzhong_left"]/a') cat_urls = [] for li in lis: cat_url = li.xpath('./@href')[0] cat_url = 'http://www.maomijiaoyi.com' + cat_url cat_urls.append(cat_url) return cat_urlsdef get_info(html2): # 爬取每个品种猫咪详情页里的有关信息 # 品种 kind = re.findall('div class="line1">.*?(.*?)', html2, re.S)[0] kind = kind.replace('\r','').replace('\n','').replace('\t','') # 参考价格 price = re.findall('参考价格:.*?(.*?)', html2, re.S)[0] price = price.replace('\r', '').replace('\n', '').replace('\t', '') # 中文学名 chinese_name = re.findall('中文学名:.*?(.*?)', html2, re.S)[0] chinese_name = chinese_name.replace('\r', '').replace('\n', '').replace('\t', '') # 别名 other_name = re.findall('别名:.*?(.*?)', html2, re.S)[0] other_name = other_name.replace('\r', '').replace('\n', '').replace('\t', '') # 祖先 ancestor = re.findall('祖先:.*?(.*?)', html2, re.S)[0] ancestor = ancestor.replace('\r', '').replace('\n', '').replace('\t', '') # 分布区域 area = re.findall('分布区域:.*?(.*?)', html2, re.S)[0] area = area.replace('\r', '').replace('\n', '').replace('\t', '') # 原产地 source_area = re.findall('原产地:.*?(.*?)', html2, re.S)[0] source_area = source_area.replace('\r', '').replace('\n', '').replace('\t', '') # 体型 body_size = re.findall('体型:.*?(.*?)', html2, re.S)[0] body_size = body_size.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 原始用途 source_use = re.findall('原始用途:.*?(.*?)', html2, re.S)[0] source_use = source_use.replace('\r', '').replace('\n', '').replace('\t', '') # 今日用途 today_use = re.findall('今日用途:.*?(.*?)', html2, re.S)[0] today_use = today_use.replace('\r', '').replace('\n', '').replace('\t', '') # 分组 group = re.findall('分组:.*?(.*?)', html2, re.S)[0] group = group.replace('\r', '').replace('\n', '').replace('\t', '') # 身高 height = re.findall('身高:.*?(.*?)', html2, re.S)[0] height = height.replace('\r', '').replace('\n', '').replace('\t', '') # 体重 weight = re.findall('体重:.*?(.*?)', html2, re.S)[0] weight = weight.replace('\r', '').replace('\n', '').replace('\t', '') # 寿命 lifetime = re.findall('寿命:.*?(.*?)', html2, re.S)[0] lifetime = lifetime.replace('\r', '').replace('\n', '').replace('\t', '') # 整体 entirety = re.findall('整体.*?.*?.*?(.*?)', html2, re.S)[0] entirety = entirety.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 毛发 hair = re.findall('毛发.*?.*?(.*?)', html2, re.S)[0] hair = hair.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 颜色 color = re.findall('颜色.*?.*?(.*?)', html2, re.S)[0] color = color.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 头部 head = re.findall('头部.*?.*?(.*?)', html2, re.S)[0] head = head.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 眼睛 eye = re.findall('眼睛.*?.*?(.*?)', html2, re.S)[0] eye = eye.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 耳朵 ear = re.findall('耳朵.*?.*?(.*?)', html2, re.S)[0] ear = ear.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 鼻子 nose = re.findall('鼻子.*?.*?(.*?)', html2, re.S)[0] nose = nose.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 尾巴 tail = re.findall('尾巴.*?.*?(.*?)', html2, re.S)[0] tail = tail.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 胸部 chest = re.findall('胸部.*?.*?(.*?)', html2, re.S)[0] chest = chest.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 颈部 neck = re.findall('颈部.*?.*?(.*?)', html2, re.S)[0] neck = neck.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 前驱 font_foot = re.findall('前驱.*?.*?(.*?)', html2, re.S)[0] font_foot = font_foot.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 后驱 rear_foot = re.findall('前驱.*?.*?(.*?)', html2, re.S)[0] rear_foot = rear_foot.replace('\r', '').replace('\n', '').replace('\t', '').strip() # 保存前面猫猫的各种有关信息 cat = [kind, price, chinese_name, other_name, ancestor, area, source_area, body_size, source_use, today_use, group, height, weight, lifetime, entirety, hair, color, head, eye, ear, nose, tail, chest, neck, font_foot, rear_foot] # 提取标签栏信息(基本信息-FCI标准-性格特点-生活习性-优缺点-喂养方法-鉴别挑选) html2 = etree.HTML(html2) labs = html2.xpath('//div[@class="property_list"]/div') for lab in labs: text1 = lab.xpath('string(.)') text1 = text1.replace('\n','').replace('\t','').replace('\r','').replace(' ','') cat.append(text1) return catdef write_to_csv(data): # 保存数据 追加写入 with open('./data/cat_kind.csv', 'a+', newline='', encoding='utf-8') as fn: wr = csv.writer(fn) wr.writerow(data)if __name__ == '__main__': # 创建保存数据的csv create_csv() # 猫咪品种页面url base_url = 'http://www.maomijiaoyi.com/index.php?/pinzhongdaquan_5.html' # 获取品种页面中的所有url html = scrape_page(base_url) urls = get_cat_urls(html) # 进度条可视化运行情况 就不打印东西来看了 pbar = tqdm(urls) # 开始爬取 for url in pbar: text = scrape_page(url) info = get_info(text) write_to_csv(info)运行效果如下:
爬取更详细的数据需要进入详情页,包含商家信息、猫咪品种、猫龄、价格、标题、在售只数、预防等信息。
看各种猫咪的体型分布
橘猫是世界各地都有的,不愧是我大橘猫。俗话说 "十个橘猫九个胖还有一个压塌炕"。橘猫比起其他花色的猫咪更喜欢吃东西,它们的食欲很好,能更好地生存,可能这也是橘猫在世界范围都有的原因吧。可它却是小型猫,橘猫小时候颜值一般挺高,看起来小小的一只,又嫩又可爱的,但等橘猫长大以后,才真正地意识到什么是 "橘足轻重"。
橘猫的交易数量最多呀,之前也提到橘猫世界各地都有,从这里也可以看到橘猫数量最多。其次是咖啡猫,布偶猫,英短蓝白猫等。
售卖的猫咪猫龄主要在1-6个月,都是刚出生还未满半岁的小猫咪呀。这时候的小猫咪应该很可爱吧,等待有缘的主人把它带回家。
最后来看一下网站里价格最贵的猫咪和浏览次数最多的猫咪
import pandas as pddf = pd.read_excel('处理后数据.xlsx')print(df.info())df1 = df.sort_values(by='浏览次数', ascending=False)print(df1.iloc[:3, ::].values)print('----------------------------------------------------------')df2 = df.sort_values(by='价格', ascending=False)print(df2.iloc[:3, ::].values)# 浏览次数最多的http://www.maomijiaoyi.com/index.php?/chanpinxiangqing_441879.htmlhttp://www.maomijiaoyi.com/index.php?/chanpinxiangqing_462431.htmlhttp://www.maomijiaoyi.com/index.php?/chanpinxiangqing_455366.html反观浏览次数排第二、第三的,价格便宜不少,预防都打了3针疫苗,在售只数还比较充裕,还比第一可爱好多(个人感觉)。
# 价格最贵的如下http://www.maomijiaoyi.com/index.php?/chanpinxiangqing_265770.htmlhttp://www.maomijiaoyi.com/index.php?/chanpinxiangqing_281910.htmlhttp://www.maomijiaoyi.com/index.php?/chanpinxiangqing_230417.html价格最贵的发现均为 3000 元的布偶猫。查阅资料发现,布偶猫,大型猫咪,不仅购买的时候价格高昂,饲养成本也比较高,因为食量和运动量都比较大,而且美容等相关费用也会高一些。
上述就是小编为大家分享的Python如何爬取猫咪网站交易数据了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
猫咪 数据 价格 品种 信息 用途 交易 可爱 网站 体型 前驱 次数 浏览 原始 世界 体重 别名 区域 原产地 参考价格 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 smc管理服务器 上海ipfs服务器价格 reactjs 数据库 互联网科技产品营销案例 GALE数据库技术员 莱山区软件开发外包公司 泰拉瑞亚热门服务器2022 实训报告数据库的开头如何写 数据库查询join 网络安全招聘企业 佛山碧桂园软件开发电话面试 服务器内存什么意思 数据库增大 怎样实施工程化软件开发 软件开发毕业设计多少钱 雅虎数据库股票代码 网络安全保护个人信息安全 打开英雄显示服务器之间出现问题 金华软件开发培训学校 电脑玩梦世界服务器卡顿 网络技术公司创新 北理工网络安全博士 刀塔2服务器 找个软件开发程序员当男朋友 守护家园安全网络安全总结 c获取服务器信息 9.17网络安全大会 网络安全等保2.0政策 高级服务器迷你世界 本溪软件开发集团