Rumah >pembangunan bahagian belakang >Tutorial Python >Web mengikis dan menganalisis data bahasa asing
Baru-baru ini saya memutuskan bahawa saya ingin melakukan projek pengikisan web dan analisis data pantas. Kerana otak saya suka menghasilkan idea-idea besar yang akan mengambil banyak masa, saya memutuskan untuk mencabar diri saya untuk menghasilkan sesuatu yang mudah yang boleh dilakukan dalam beberapa jam.
Inilah yang saya dapat:
Memandangkan ijazah sarjana muda saya pada asalnya dalam Bahasa Asing (Perancis dan Sepanyol), saya fikir ia adalah menyeronokkan untuk mengikis beberapa data berkaitan bahasa di web. Saya mahu menggunakan pustaka BeautifulSoup, yang boleh menghuraikan html statik tetapi tidak dapat menangani halaman web dinamik yang memerlukan peristiwa onclick untuk mendedahkan keseluruhan set data (iaitu mengklik pada halaman data seterusnya jika halaman dinomborkan).
Saya memutuskan pada halaman Wikipedia ini bahasa yang paling biasa dituturkan.
Saya mahu melakukan perkara berikut:
Saya memutuskan untuk membahagikan projek kepada langkah-langkah ini untuk mengasingkan kebimbangan, tetapi saya juga ingin mengelak daripada membuat beberapa permintaan yang tidak perlu untuk mendapatkan html daripada Wikipedia dengan menjalankan semula skrip. Menyimpan fail html dan kemudian bekerja dengannya dalam skrip berasingan bermakna anda tidak perlu terus meminta semula data, kerana anda sudah memilikinya.
Pautan ke repo github saya untuk projek ini ialah: https://github.com/gabrielrowan/Foreign-Languages-Analysis
Mula-mula, saya mendapatkan semula dan mengeluarkan html. Selepas bekerja dengan C# dan C , ia sentiasa menjadi satu kebaharuan kepada saya betapa pendek dan ringkasnya kod Python ?
url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers' response = requests.get(url) html = response.text with open("languages_html.txt", "w", encoding="utf-8") as file: file.write(html)
Untuk menghuraikan html dengan sup Cantik dan memilih jadual yang saya minati, saya lakukan:
with open("languages_html.txt", "r", encoding="utf-8") as file: soup = BeautifulSoup(file, 'html.parser') # get table top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')
Kemudian, saya mendapat teks pengepala jadual untuk mendapatkan nama lajur untuk bingkai data panda saya:
# get column names columns = top_languages_table.find_all("th") column_titles = [column.text.strip() for column in columns]
Selepas itu, saya mencipta bingkai data, menetapkan nama lajur, mendapatkan semula setiap baris jadual dan menulis setiap baris pada bingkai data:
# get table rows table_data = top_languages_table.find_all("tr") # define dataframe df = pd.DataFrame(columns=column_titles) # get table data for row in table_data[1:]: row_data = row.find_all('td') row_data_txt = [row.text.strip() for row in row_data] print(row_data_txt) df.loc[len(df)] = row_data_txt
Nota - tanpa menggunakan strip() terdapat n aksara dalam teks yang tidak diperlukan.
Terakhir, saya menulis bingkai data ke .csv.
Sebelumnya, saya akan mengemukakan soalan ini yang ingin saya jawab daripada data:
Walaupun saya tidak akan memasukkan kod untuk menjawab semua soalan ini, saya akan pergi ke 2 soalan yang melibatkan carta.
Mula-mula, saya mencipta bingkai data yang hanya menyertakan baris dengan nama cawangan ialah 'Romance' atau 'Jerman'
url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers' response = requests.get(url) html = response.text with open("languages_html.txt", "w", encoding="utf-8") as file: file.write(html)
Kemudian saya menyatakan paksi x, paksi y dan warna bar yang saya inginkan untuk carta:
with open("languages_html.txt", "r", encoding="utf-8") as file: soup = BeautifulSoup(file, 'html.parser') # get table top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')
Ini dicipta:
Untuk membuat carta pai, saya mendapatkan semula 3 keluarga bahasa yang paling biasa dan meletakkannya dalam bingkai data.
Kumpulan kod ini mendapat jumlah keseluruhan penutur asli bagi setiap keluarga bahasa, mengisih mereka dalam tertib menurun dan mengekstrak 3 entri teratas.
# get column names columns = top_languages_table.find_all("th") column_titles = [column.text.strip() for column in columns]
Kemudian saya meletakkan data dalam carta pai, menyatakan paksi y 'Penutur Asli' dan legenda, yang mencipta label berkod warna untuk setiap keluarga bahasa yang ditunjukkan dalam carta.
# get table rows table_data = top_languages_table.find_all("tr") # define dataframe df = pd.DataFrame(columns=column_titles) # get table data for row in table_data[1:]: row_data = row.find_all('td') row_data_txt = [row.text.strip() for row in row_data] print(row_data_txt) df.loc[len(df)] = row_data_txt
Kod dan jawapan untuk selebihnya soalan boleh didapati di sini. Saya menggunakan markdown dalam buku nota untuk menulis soalan dan jawapannya.
Untuk lelaran seterusnya bagi projek pengikisan web & analisis data, saya ingin membuat perkara lebih rumit dengan:
Walaupun ia cepat, saya seronok melakukan projek ini. Ia mengingatkan saya betapa bergunanya projek pendek dan terurus untuk mendapatkan wakil latihan? Selain itu, mengekstrak data daripada internet dan mencipta carta daripadanya, walaupun dengan set data yang kecil, menyeronokkan ?
Atas ialah kandungan terperinci Web mengikis dan menganalisis data bahasa asing. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!