Convertir le PDF de la liste des concessionnaires de la Campagne Go To Eat Hokkaido en CSV
Avec tabula, pdfbox et poppler, les personnages "Koshihan Kuma-bouilli Shin-no-zuru" disparaissent.
Aucun résultat même si vous recherchez "Kumako Ramen Higashi Asahikawa" à Dohoku.
camelot et pdfplumber utilisant pdfminer sont exportés sous la forme de "(cid: 1279)", vous pouvez donc vérifier l'affichage du PDF et le remplacer.
Le logiciel de création est "cubepdf", la police est Yu Gothic
import camelot
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import pandas as pd
url = "https://gotoeat-hokkaido.jp/general/particStores/"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
r = requests.get(url, headers=headers)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
dfs = []
for li in soup.select("ul.cf > li > a"):
link = urljoin(url, li.get("href"))
area = li.get_text(strip=True)
tables = camelot.read_pdf(link, split_text=True, pages="all", strip_text="\n", )
for table in tables:
df_tmp = pd.DataFrame(table.data[1:], columns=table.data[0])
df_tmp.columns = df_tmp.columns.map(lambda s: "".join(s.split()))
df_tmp["surface"] = area
dfs.append(df_tmp)
df
df = pd.concat(dfs)
df = df.fillna("").applymap(
lambda s: s.replace("(cid:1279)", "Yue")
.replace("(cid:1535)", "Han")
.replace("(cid:1791)", "ours")
.replace("(cid:2303)", "Bouilli")
.replace("(cid:2559)", "Nouveau")
.replace("(cid:2815)", "Bruyant")
.replace("(cid:3071)", "grue")
)
#Gestionnaire CJK/A remplacé Kang Hee
tbl = str.maketrans(
"- - - L'eau _ ⿌ ⿍ ⿎ ⿏ ⿐ ⿑ ⿒ ⿓ ⿔ ⿕ 戶 黑",
"乚 亻 刂 㔾 兀 尣 尢 巳 幺 彑 忄 扌 攵 旡 Mère 氵 氺 灬 丬 犭 罒 礻 罓 罒 耂 艹 衤 衤 轀 耂 艹 衤 衤 亅 躠 儿 儿 儿 儿 儿 儿 儿 夊 凵 冖 冫 几 凵 puissance de l'épée 勹 匕 匚 匸 10 卜 卩 厂 厶 厶 囗 囗 夂 夊 夊 夊 夊 Yumiko Pierres d'épéiste, épées, trous, riz en bambou, boîtes de fil, épées, épées, oreilles, épées, épées, épées, épées, épées, épées, épées, épées 辵 酉 釆 臆 辆 辆 隶 隹 隹 靹 韶 韭 蟭 蟭 蟭 蟭 蟭 蟭 觥 鬥 鬯 鬲 oiseau poisson démon 鹵 麥 黃 黍 黍 黹 黽 Utsudo Noir",
)
df = df.applymap(lambda s: s.translate(tbl))
df.reset_index(drop=True, inplace=True)
df.index += 1
df.to_csv("gotoeat_hokkaido.csv", encoding="utf_8_sig")