日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬取豆瓣图书前250

發布時間:2023/12/16 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取豆瓣图书前250 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在學習python爬蟲系列課程,也在學習寫一些程序實例,這篇文章是爬取豆瓣圖書的前250本數的名稱和其他信息。


前期準備

1.安裝適合的python編輯器,本人使用的是Anaconda中的Jupyter Notebook,因為便于編寫和管理python的各種第三方庫,所以推薦大家也使用。下載地址為:https://www.anaconda.com/download/

2.本文章要使用python庫中的requests和BeautifulSoup4庫爬取網頁和解析網頁。因為不是python自帶的標準庫,所以要手動安裝以上兩個庫。

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

3.用pip安裝以上兩個庫,Win+R打開輸入cmd, 輸入如下:

pip install requests pip install beautifulsoup4

網頁分析

下面我們開始我們的爬蟲程序主體,我們將要訪問的是豆瓣圖書的前250榜單的書名和其他信息

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

如下圖:


下面我們檢索我們所需要的字段所在的標簽,右鍵打開源代碼檢查元素,我們以查詢“追風箏的人”書名為例查找所在的標簽;如下圖:


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


下面我們還要看到250本書在10個頁面中,要全部爬取下來我們還需要觀察更多的網頁結構:

第一個網頁的鏈接為:https://book.douban.com/top250?

第二個網頁的鏈接為:https://book.douban.com/top250?start=25

第三個網頁的鏈接為:https://book.douban.com/top250?start=50

我們可以發現第二、三頁鏈接上有個start=?,可以判斷為每頁的起始值為0,25,50...

上面的每頁都有類似的結構,我們可以開始編寫我們的主程序。


程序結構

先導入我們所需要的requests庫Beautiful Soup庫;

import requests
from bs4 import BeautifulSoup

然后來編寫我們程序的主體框架;

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

接下來我們根據各個函數的目的,填充函數內的內容,第一個函數是要獲取頁面的信息;

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

第二個函數是要獲取數據,并存儲在列表中;

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

第三個函數是將列表中的數據輸出打印出來;

def print_data(list):print("{:^6}\t{:^10}\t{:^16}".format('序號','書名','信息'))count = 0 #用count來表示爬取的序號for 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?' #這是起始也的urldepth = 10 #我們爬取的深度為10頁info_list = []for i in range(depth): #在每頁中進行遍歷url = start_url + str(25*i) #實際的url是原始url加上start=? html = getHTMLText(url) #解析每頁的網頁信息get_data(info_list,html) #獲取數據print_data(info_list) #打印輸出最后的列表 main()

上面我們就全部編寫完成這個爬蟲程序,輸出如下;


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

程序代碼

上面我們成功的寫完了豆瓣爬蟲的代碼,并成功輸出了我們大致所要的結果,全部代碼如下;

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 "產生異常"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('序號','書名','信息'))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()

總結

1.爬蟲主要用requests庫和Beautiful Soup庫可以簡明地爬取網頁上的信息;

2.先定好程序主要框架,再根據目的需求填充函數內容:獲取網頁信息>爬取網頁數據>打印輸出;

3.對于所有的信息存儲于多頁,要觀察網頁信息,構造每頁的url鏈接來解決;

3.最重要的是解析網頁結構,最好可以用標簽樹的形式確定字段所在的標簽,并遍歷全部標簽存儲數據。


本人學習的python也不太久,文章中有些理解和書寫錯誤,還望大家理解和之處,謝謝! 另外,強烈推薦北京理工大學嵩天老師的python系列課程。 更多關于本人的信息請訪問本人網站http://www.o-xunkhun.com/(目前處于申請維護狀態)

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。