日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

python爬取豆瓣图书前250

發(fā)布時(shí)間:2023/12/16 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取豆瓣图书前250 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在學(xué)習(xí)python爬蟲(chóng)系列課程,也在學(xué)習(xí)寫(xiě)一些程序?qū)嵗?#xff0c;這篇文章是爬取豆瓣圖書(shū)的前250本數(shù)的名稱和其他信息。


前期準(zhǔn)備

1.安裝適合的python編輯器,本人使用的是Anaconda中的Jupyter Notebook,因?yàn)楸阌诰帉?xiě)和管理python的各種第三方庫(kù),所以推薦大家也使用。下載地址為:https://www.anaconda.com/download/

2.本文章要使用python庫(kù)中的requests和BeautifulSoup4庫(kù)爬取網(wǎng)頁(yè)和解析網(wǎng)頁(yè)。因?yàn)椴皇莗ython自帶的標(biāo)準(zhǔn)庫(kù),所以要手動(dòng)安裝以上兩個(gè)庫(kù)。

  • requests庫(kù)下載地址:https://pypi.python.org/pypi/requests/
  • Beautiful Soup4庫(kù)下載地址:https://pypi.python.org/pypi/beautifulsoup

3.用pip安裝以上兩個(gè)庫(kù),Win+R打開(kāi)輸入cmd, 輸入如下:

pip install requests pip install beautifulsoup4

網(wǎng)頁(yè)分析

下面我們開(kāi)始我們的爬蟲(chóng)程序主體,我們將要訪問(wèn)的是豆瓣圖書(shū)的前250榜單的書(shū)名和其他信息

https://book.douban.com/top250?

如下圖:


下面我們檢索我們所需要的字段所在的標(biāo)簽,右鍵打開(kāi)源代碼檢查元素,我們以查詢“追風(fēng)箏的人”書(shū)名為例查找所在的標(biāo)簽;如下圖:


我們可以看到所有的字段都存儲(chǔ)在標(biāo)簽div{'class':'indent'}中,每個(gè)字段都在各個(gè)table標(biāo)簽中,書(shū)名稱在div{'class':'p12'}的a 標(biāo)簽中,其他信息在p標(biāo)簽中{’class':'pl'}中。如下圖:


下面我們還要看到250本書(shū)在10個(gè)頁(yè)面中,要全部爬取下來(lái)我們還需要觀察更多的網(wǎng)頁(yè)結(jié)構(gòu):

第一個(gè)網(wǎng)頁(yè)的鏈接為:https://book.douban.com/top250?

第二個(gè)網(wǎng)頁(yè)的鏈接為:https://book.douban.com/top250?start=25

第三個(gè)網(wǎng)頁(yè)的鏈接為:https://book.douban.com/top250?start=50

我們可以發(fā)現(xiàn)第二、三頁(yè)鏈接上有個(gè)start=?,可以判斷為每頁(yè)的起始值為0,25,50...

上面的每頁(yè)都有類似的結(jié)構(gòu),我們可以開(kāi)始編寫(xiě)我們的主程序。


程序結(jié)構(gòu)

先導(dǎo)入我們所需要的requests庫(kù)Beautiful Soup庫(kù);

import requests
from bs4 import BeautifulSoup

然后來(lái)編寫(xiě)我們程序的主體框架;

def getHTMLText(url): #獲得所需要的網(wǎng)頁(yè)頁(yè)面信息returndef get_data(list,html): #從網(wǎng)頁(yè)中獲取頁(yè)面信息,并存入列表中 returndef print_data(list): #將存儲(chǔ)在列表中的信息輸出打印出來(lái)def main(): main()

接下來(lái)我們根據(jù)各個(gè)函數(shù)的目的,填充函數(shù)內(nèi)的內(nèi)容,第一個(gè)函數(shù)是要獲取頁(yè)面的信息;

def getHTMLText(url):try:r = requests.get(url ,timeout = 30)r.raise_for_status()r.encoding =r.apparent_encodingreturn r.textexcept:return "產(chǎn)生異常"

第二個(gè)函數(shù)是要獲取數(shù)據(jù),并存儲(chǔ)在列表中;

def get_data(list,html):tables = BeautifulSoup(html, 'html.parser').find('div', {'class':'indent'}).find_all('table')#在div標(biāo)簽中找到所有的table標(biāo)簽 ?for table in tables: #在所有的table標(biāo)簽中遍歷元素 title = table.find('div', {'class':'pl2'}).find('a').get_text() #找到書(shū)名所在的a標(biāo)簽info = table.find('p', {'class':'pl'}).get_text() #找到其他信息所在的p標(biāo)簽list.append([title.strip(),info.strip()]) #將其存儲(chǔ)列表,用strip()出去其中的空字符串

第三個(gè)函數(shù)是將列表中的數(shù)據(jù)輸出打印出來(lái);

def print_data(list):print("{:^6}\t{:^10}\t{:^16}".format('序號(hào)','書(shū)名','信息'))count = 0 #用count來(lái)表示爬取的序號(hào)for b in list:count += 1print("{:^6}\t{:^16}\t{:^16}".format(count,b[0],b[1]))

最后我們來(lái)編寫(xiě)主函數(shù);

def main():start_url = 'https://book.douban.com/top250?' #這是起始也的urldepth = 10 #我們爬取的深度為10頁(yè)info_list = []for i in range(depth): #在每頁(yè)中進(jìn)行遍歷url = start_url + str(25*i) #實(shí)際的url是原始url加上start=? html = getHTMLText(url) #解析每頁(yè)的網(wǎng)頁(yè)信息get_data(info_list,html) #獲取數(shù)據(jù)print_data(info_list) #打印輸出最后的列表 main()

上面我們就全部編寫(xiě)完成這個(gè)爬蟲(chóng)程序,輸出如下;


上面我們爬取的250本的豆瓣圖書(shū)信息,但是不知道為什么我們使用的strip()除去空字符,在三體這本書(shū)還是有空字符存在。希望大家指點(diǎn)方法解決。

程序代碼

上面我們成功的寫(xiě)完了豆瓣爬蟲(chóng)的代碼,并成功輸出了我們大致所要的結(jié)果,全部代碼如下;

import requests from bs4 import BeautifulSoupdef getHTMLText(url):try:r = requests.get(url ,timeout = 30)r.raise_for_status()r.encoding =r.apparent_encodingreturn r.textexcept:return "產(chǎn)生異常"def get_data(list,html):tables = BeautifulSoup(html, 'html.parser').find('div', {'class':'indent'}).find_all('table')for table in tables: title = table.find('div', {'class':'pl2'}).find('a').get_text()info = table.find('p', {'class':'pl'}).get_text()list.append([title.strip(),info.strip()])def print_data(list):print("{:^6}\t{:^10}\t{:^16}".format('序號(hào)','書(shū)名','信息'))count = 0for b in list:count += 1print("{:^6}\t{:^16}\t{:^16}".format(count,b[0],b[1]))def main():start_url = 'https://book.douban.com/top250?'depth = 10info_list = []for i in range(depth):url = start_url + str(25*i)html = getHTMLText(url)get_data(info_list,html)print_data(info_list) main()

總結(jié)

1.爬蟲(chóng)主要用requests庫(kù)和Beautiful Soup庫(kù)可以簡(jiǎn)明地爬取網(wǎng)頁(yè)上的信息;

2.先定好程序主要框架,再根據(jù)目的需求填充函數(shù)內(nèi)容:獲取網(wǎng)頁(yè)信息>爬取網(wǎng)頁(yè)數(shù)據(jù)>打印輸出;

3.對(duì)于所有的信息存儲(chǔ)于多頁(yè),要觀察網(wǎng)頁(yè)信息,構(gòu)造每頁(yè)的url鏈接來(lái)解決;

3.最重要的是解析網(wǎng)頁(yè)結(jié)構(gòu),最好可以用標(biāo)簽樹(shù)的形式確定字段所在的標(biāo)簽,并遍歷全部標(biāo)簽存儲(chǔ)數(shù)據(jù)。


本人學(xué)習(xí)的python也不太久,文章中有些理解和書(shū)寫(xiě)錯(cuò)誤,還望大家理解和之處,謝謝! 另外,強(qiáng)烈推薦北京理工大學(xué)嵩天老師的python系列課程。 更多關(guān)于本人的信息請(qǐng)?jiān)L問(wèn)本人網(wǎng)站http://www.o-xunkhun.com/(目前處于申請(qǐng)維護(hù)狀態(tài))

總結(jié)

以上是生活随笔為你收集整理的python爬取豆瓣图书前250的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。