[DAY 04]物品拍卖价格查询功能(2/4)

今天主要是分享如何抓取灰机WIKI里物品日文名称

物品页面的右边会有各国的名称,这是我们要抓取的目标区块

一开始还没找到解包资料时的想法是从他的物品检索器页面遍历每一页的物品

但测过几次发现在request的时候常常会抓不到导致资料的遗漏

後来找到解包资料真的轻松很多

有关於物品页面他们的网址命名规则是https://ff14.huijiwiki.com/wiki/物品:<物品名称>

所以我们直接把Item.csvName栏位转成list格式遍历每个物品的网址就可以了

附上爬取资料的程序码,由於我有限3秒爬一次页面,记得花了我四天才爬完

最後将资料存成CSV档

import requests
import time 
import pandas as pd
from bs4 import BeautifulSoup
from urllib import request
from urllib.parse import quote
import opencc
if __name__ == "__main__":
    

    rawdf = pd.read_csv("FF14_rawitem.csv")
    rawdf.dropna(subset=["简体中文"],inplace=True)
    url = "https://ff14.huijiwiki.com"
    
    item_list = set(rawdf["简体中文"].tolist())

    df = pd.DataFrame()
    converter = opencc.OpenCC('s2t.json')
    header = {"user-agent": "Mozilla/5.0 ((Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
    for cnname in item_list:
        try:
            sub_url = url+f"/wiki/%E7%89%A9%E5%93%81:{cnname}"
            req = requests.get(sub_url, headers=header, timeout = 60)
            time.sleep(3)
            soup = BeautifulSoup(req.text, "html.parser")
            item_list = soup.select('div[class="ff14-content-box-block"] > ul[class="img-v-align-baseline"] > li')[:5]
            ct_text = converter.convert(item_list[0].text)
            item_df = pd.DataFrame(data={"繁体中文":[ct_text[1:]],
                                        "简体中文":[item_list[0].text[1:]],
                                        "日文":[item_list[1].text[1:]],
                                        "英文":[item_list[2].text[1:]],
                                        "法文":[item_list[3].text[1:]],
                                        "德文":[item_list[4].text[1:]]})
                # time.sleep(3)
        except BaseException:
            print(cnname)
            continue

        df = df.append(item_df)
        print(f"{cnname} complete")
    df.to_csv("FF14_item.csv",encoding="utf-8-sig",index=0)

接下来跟解包的资料进行合并,主要是合并ID这个栏位

合并的程序码我也一并附上:

import pandas as pd
import pickle

if __name__ == '__main__':
    #用於处理rawdata转字典格式
    df = pd.read_csv("FF14_rawitem.csv")
    df = df[["ID","英文"]]
    base_df = pd.read_csv("FF14_item.csv")
    all_df = pd.merge(base_df,df, how="left", on=["英文"])
    for column_name in list(all_df.columns):
        all_df[column_name] = all_df[column_name].map(str)

    #建立item字典
    item_dict = {}
    column_list = list(all_df.columns)
    for index,row in all_df.iterrows():
        for word in column_list:
            sub_dict={}
            column_list2 = list(all_df.columns)
            column_list2.remove(word)
            for i in column_list2:
                sub_dict[str(i)] = str(row[i])
            item_dict[str(row[word])] = sub_dict

    #输出字典
    with open("item_dict.pkl", "wb") as tf:
        pickle.dump(item_dict,tf)

明天会介绍Discord python API使用方法


<<:  Day4 中秋节就是要烤肉阿-韩式烤五花肉

>>:  [13th][Day11] image tag

Day 8 Data types, Variables, and Operators (Ⅳ)

Truth Table Let A and B be two Boolean variables. ...

[DAY 15] RNN 的实作以及 Regression 例子

前言 今天我们要使用 RNN 类别中的 LSTM 来实做一个股价预测的例子,这种预测未来值的 cas...

网路架构检视 - 网路分段/分区与 IP 发放

打 D2R ,连梗图都懒得找... 在资安法中,有些应办事项即使在技术面定义也很广,不会有明确的实作...

[DAY29]GKE-从0开始动手建k8s

上一篇文章对GKE做了小小的介绍,这篇就来从0开始建k8s,本篇都是以UI操作用主,如果有cli控可...

Day 30 JavaScript < 简易数据类型介绍 & End>

1. 数据类型简介 1-1 为什麽需要数据类型 在电脑中,不同的数据所需占用的空间是不同的,为了方便...