今天主要是分享如何抓取灰机WIKI里物品日文名称
物品页面的右边会有各国的名称,这是我们要抓取的目标区块
一开始还没找到解包资料时的想法是从他的物品检索器页面遍历每一页的物品
但测过几次发现在request的时候常常会抓不到导致资料的遗漏
後来找到解包资料真的轻松很多
有关於物品页面他们的网址命名规则是https://ff14.huijiwiki.com/wiki/物品:<物品名称>
所以我们直接把Item.csv
的Name
栏位转成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使用方法
Truth Table Let A and B be two Boolean variables. ...
前言 今天我们要使用 RNN 类别中的 LSTM 来实做一个股价预测的例子,这种预测未来值的 cas...
打 D2R ,连梗图都懒得找... 在资安法中,有些应办事项即使在技术面定义也很广,不会有明确的实作...
上一篇文章对GKE做了小小的介绍,这篇就来从0开始建k8s,本篇都是以UI操作用主,如果有cli控可...
1. 数据类型简介 1-1 为什麽需要数据类型 在电脑中,不同的数据所需占用的空间是不同的,为了方便...