Python ialah salah satu bahasa pengaturcaraan yang paling popular hari ini dan telah digunakan secara meluas dalam pelbagai bidang, seperti sains data, kecerdasan buatan, keselamatan rangkaian, dsb. Antaranya, Python berprestasi baik dalam bidang perangkak web Banyak syarikat dan individu menggunakan Python untuk pengumpulan dan analisis data. Artikel ini akan memperkenalkan cara menggunakan Python untuk merangkak maklumat buku Douban dan membantu pembaca mempunyai pemahaman awal tentang kaedah pelaksanaan dan teknologi perangkak web Python.
Pertama sekali, untuk perangkak maklumat buku Douban, kita perlu menggunakan dua perpustakaan penting dalam Python: urllib dan beautifulsoup4. Antaranya, perpustakaan urllib digunakan terutamanya untuk permintaan rangkaian dan pembacaan data, manakala perpustakaan beautifulsoup4 boleh digunakan untuk menghuraikan dokumen berstruktur seperti HTML dan XML untuk mengekstrak maklumat yang diperlukan. Sebelum menggunakan perpustakaan ini, kita perlu memasangnya terlebih dahulu Gunakan arahan pip untuk menyelesaikan pemasangan. Selepas pemasangan selesai, kami boleh memulakan pertempuran sebenar kami.
Apabila menggunakan Python untuk merangkak, anda perlu menjelaskan sasaran merangkak terlebih dahulu. Untuk artikel ini, matlamat kami adalah untuk merangkak maklumat asas buku Douban, seperti tajuk buku, pengarang, penerbit, tarikh penerbitan, penilaian, dsb. Selain itu, kita juga perlu merangkak berbilang halaman maklumat buku.
Selepas menentukan sasaran merangkak, kami perlu menganalisis lagi struktur HTML Buku Douban untuk menentukan lokasi dan ciri-ciri maklumat yang diperlukan. Kami boleh menggunakan alat pembangun yang disertakan dengan penyemak imbas seperti Chrome atau Firefox untuk melihat kod sumber halaman. Dengan memerhatikan struktur HTML, kita boleh mencari teg dan atribut yang perlu dirangkak, dan kemudian menulis kod Python untuk melaksanakannya.
Seterusnya, kami menulis kod perangkak buku Douban dalam Python. Inti kod ialah:
import urllib.request from bs4 import BeautifulSoup url = 'https://book.douban.com/top250' books = [] def get_html(url): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'} req = urllib.request.Request(url, headers=headers) response = urllib.request.urlopen(req) html = response.read().decode('utf-8') return html def parse_html(html): soup = BeautifulSoup(html,'html.parser') book_list_soup = soup.find('div', attrs={'class': 'article'}) for book_soup in book_list_soup.find_all('table'): book_title_soup = book_soup.find('div', attrs={'class': 'pl2'}) book_title_link = book_title_soup.find('a') book_title = book_title_link.get('title') book_url = book_title_link.get('href') book_info_soup = book_soup.find('p', attrs={'class': 'pl'}) book_info = book_info_soup.string.strip() book_rating_num_soup = book_soup.find('span', attrs={'class': 'rating_nums'}) book_rating_num = book_rating_num_soup.string.strip() book_rating_people_num_span_soup = book_soup.find('span', attrs={'class': 'pl'}) book_rating_people_num = book_rating_people_num_span_soup.string.strip()[1:-4] book_author_and_publish_soup = book_soup.find('p',attrs={'class':'pl'}).next_sibling.string.strip() book_author_and_publish = book_author_and_publish_soup.split('/') book_author = book_author_and_publish[0] book_publish = book_author_and_publish[-3] book_year = book_author_and_publish[-2] books.append({ 'title': book_title, 'url': book_url, 'info': book_info, 'author':book_author, 'publish':book_publish, 'year':book_year, 'rating_num':book_rating_num, 'rating_people_num':book_rating_people_num }) def save_data(): with open('douban_top250.txt','w',encoding='utf-8') as f: for book in books: f.write('书名:{0} '.format(book['title'])) f.write('链接:{0} '.format(book['url'])) f.write('信息:{0} '.format(book['info'])) f.write('作者:{0} '.format(book['author'])) f.write('出版社:{0} '.format(book['publish'])) f.write('出版年份:{0} '.format(book['year'])) f.write('评分:{0} '.format(book['rating_num'])) f.write('评分人数:{0} '.format(book['rating_people_num'])) if __name__ == '__main__': for i in range(10): start = i*25 url = 'https://book.douban.com/top250?start={0}'.format(start) html = get_html(url) parse_html(html) save_data()
Analisis kod:
Pertama, kami mentakrifkan url tapak web utama dan buku senarai kosong (digunakan untuk menyimpan buku maklumat). Seterusnya, kami menulis fungsi get_html untuk menghantar permintaan dan mendapatkan halaman HTML. Dalam fungsi ini, kami menetapkan pengepala permintaan untuk mensimulasikan penyemak imbas menghantar permintaan untuk mengelak daripada disekat oleh tapak web. Kami menggunakan kaedah Permintaan perpustakaan urllib untuk merangkum pengepala permintaan dan URL ke dalam objek, kemudian menggunakan kaedah urlopen perpustakaan urllib untuk menghantar permintaan rangkaian dan mendapatkan halaman, dan akhirnya menggunakan kaedah baca dan nyahkod untuk menukar kandungan halaman ke dalam rentetan utf-8.
Kami menulis fungsi parse_html untuk menghuraikan dokumen HTML dan mengekstrak maklumat yang diperlukan. Dalam fungsi ini, kami menggunakan kaedah find dan find_all pustaka beautifulsoup4 untuk mencari teg dan atribut yang memenuhi keperluan dalam halaman HTML. Khususnya, dengan memerhatikan struktur HTML buku Douban, kami menemui teg jadual setiap buku dan tajuk buku, pautan, maklumat, penilaian dan maklumat lain yang sepadan, dan menulis kod untuk mengekstrak data ini. Antaranya, kami menggunakan kaedah jalur dan belah untuk memproses rentetan untuk mengalih keluar aksara ruang putih berlebihan dan membelah rentetan.
Akhir sekali, kami menulis fungsi save_data untuk menyimpan maklumat buku yang diekstrak ke dalam fail setempat. Dalam fungsi ini, kami menggunakan fungsi terbina dalam Python terbuka untuk membuka fail teks, menulis kandungan fail dalam mod tulis dan menggunakan kaedah format untuk memformat maklumat berkaitan setiap buku ke dalam rentetan dan menulisnya pada fail. Ambil perhatian bahawa kita perlu menambah pengekodan='utf-8' selepas nama fail untuk memastikan bahawa kandungan fail tidak akan bercelaru.
Dalam program utama, kami menggunakan gelung for untuk merangkak 250 buku pertama di Douban Books. Untuk melakukan ini, kita perlu merangkak 25 buku setiap halaman, dan merangkak 10 halaman secara keseluruhan. Dalam setiap gelung, kami mengira url yang diperlukan berdasarkan nombor halaman semasa dan memanggil fungsi get_html untuk mendapatkan halaman HTML. Seterusnya, kami menghantar halaman ke fungsi parse_html, yang menghuraikan halaman dan mengekstrak maklumat yang diperlukan. Akhir sekali, kami memanggil fungsi save_data untuk menyimpan semua maklumat buku ke fail setempat.
Jalankan kodRingkasan
Melalui pengenalan artikel ini, kami mempunyai pemahaman awal tentang kaedah dan teknologi pelaksanaan perangkak web Python. Khususnya, kami menggunakan perpustakaan urllib dan beautifulsoup4 dalam Python untuk menulis program Python untuk merangkak maklumat Buku Douban berdasarkan struktur HTML tapak web Buku Douban dan berjaya melaksanakan pengumpulan dan penyimpanan data. Selain itu, dalam aplikasi praktikal, kita perlu memahami beberapa langkah berjaga-jaga untuk perangkak web, seperti tidak menghantar permintaan ke tapak web yang sama terlalu kerap untuk mengelakkan alamat IP disekat.
Atas ialah kandungan terperinci Penggunaan praktikal perangkak dalam Python: perangkak buku Douban. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!