网站建设资讯

NEWS

网站建设资讯

Python如何爬取猫咪网站交易数据

这期内容当中小编将会给大家带来有关Python如何爬取猫咪网站交易数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联专业为企业提供光明网站建设、光明做网站、光明网站设计、光明网站制作等企业网站建设、网页设计与制作、光明企业网站模板建站服务,十载光明做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

一、前言

看到可爱的猫咪表情包,总是会忍不住收藏,晒部分图如下:

Python如何爬取猫咪网站交易数据

从这个网站里爬取了猫猫品种介绍的数据,以及 20W+ 条猫猫交易数据,以此来了解一下可爱的猫咪。

二、数据获取

打开猫猫交易网,先爬取猫咪品种数据,打开页面可以看到猫猫品种列表:

Python如何爬取猫咪网站交易数据

检查网页,可以发现网页结构简单,容易解析和提取数据。爬虫代码如下:

import requests
import re
import csv
from lxml import etree
from tqdm import tqdm
from 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 headers


def 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.text


def 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_urls


def 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 cat def 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)

运行效果如下:

Python如何爬取猫咪网站交易数据

爬取更详细的数据需要进入详情页,包含商家信息、猫咪品种、猫龄、价格、标题、在售只数、预防等信息。

Python如何爬取猫咪网站交易数据

看各种猫咪的体型分布

Python如何爬取猫咪网站交易数据

橘猫是世界各地都有的,不愧是我大橘猫。俗话说 "十个橘猫九个胖还有一个压塌炕"。橘猫比起其他花色的猫咪更喜欢吃东西,它们的食欲很好,能更好地生存,可能这也是橘猫在世界范围都有的原因吧。可它却是小型猫,橘猫小时候颜值一般挺高,看起来小小的一只,又嫩又可爱的,但等橘猫长大以后,才真正地意识到什么是 "橘足轻重"。

Python如何爬取猫咪网站交易数据

橘猫的交易数量最多呀,之前也提到橘猫世界各地都有,从这里也可以看到橘猫数量最多。其次是咖啡猫,布偶猫,英短蓝白猫等。

Python如何爬取猫咪网站交易数据

售卖的猫咪猫龄主要在1-6个月,都是刚出生还未满半岁的小猫咪呀。这时候的小猫咪应该很可爱吧,等待有缘的主人把它带回家。

最后来看一下网站里价格最贵的猫咪和浏览次数最多的猫咪

import pandas as pd

df = 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.html
http://www.maomijiaoyi.com/index.php?/chanpinxiangqing_462431.html
http://www.maomijiaoyi.com/index.php?/chanpinxiangqing_455366.html

Python如何爬取猫咪网站交易数据

反观浏览次数排第二、第三的,价格便宜不少,预防都打了3针疫苗,在售只数还比较充裕,还比第一可爱好多(个人感觉)。

# 价格最贵的如下
http://www.maomijiaoyi.com/index.php?/chanpinxiangqing_265770.html
http://www.maomijiaoyi.com/index.php?/chanpinxiangqing_281910.html
http://www.maomijiaoyi.com/index.php?/chanpinxiangqing_230417.html

Python如何爬取猫咪网站交易数据

Python如何爬取猫咪网站交易数据

价格最贵的发现均为 3000 元的布偶猫。查阅资料发现,布偶猫,大型猫咪,不仅购买的时候价格高昂,饲养成本也比较高,因为食量和运动量都比较大,而且美容等相关费用也会高一些。

上述就是小编为大家分享的Python如何爬取猫咪网站交易数据了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


分享标题:Python如何爬取猫咪网站交易数据
网站链接:http://cdweb.net/article/iejeso.html