Penggunaan praktikal perangkak dalam Python: perangkak buku Douban

WBOY
Lepaskan: 2023-06-11 13:33:07
asal
2208 orang telah melayarinya

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.

  1. Tentukan sasaran merangkak

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.

  1. Analisis struktur HTML

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.

  1. Menulis kod

Seterusnya, kami menulis kod perangkak buku Douban dalam Python. Inti kod ialah:

  • menghantar permintaan rangkaian dan mendapatkan halaman HTML
  • menghuraikan dokumen HTML dan mengekstrak maklumat yang diperlukan; data.
  • Berikut ialah kod lengkap:
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()
Salin selepas log masuk

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 kod
  1. Selepas melengkapkan penulisan kod, kita boleh memasuki direktori di mana kod itu terletak dalam baris arahan (sistem Windows) atau terminal (MacOS atau sistem Linux), dan Jalankan arahan skrip perangkak python3 name.py untuk menjalankan perangkak web Python. Semasa program berjalan, kita boleh memerhati maklumat output program untuk menentukan sama ada program dilaksanakan dengan betul. Selepas program dilaksanakan, kami boleh menyemak fail tempatan douban_top250.txt untuk mengesahkan sama ada data telah berjaya disimpan.

Ringkasan

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan