Python按照你的檢索爬取天津大學圖書館書籍信息

Python按照你的檢索爬取天津大學圖書館書籍信息


完全自己手寫的代碼,入門級水平把。對於靜態HTML網頁爬取來說相對簡單,現在對於動態編寫JavaScript還不知道如何處理。由於天津大學圖書館書籍相關信息都寫在靜態html中,爬取還是很簡單的。

爬取步驟

1.通過requests.get()得到網頁內容
2.通過BeautifulSoup類可以對網頁進行解析,篩選你所需要的信息或者標籤,也可以通過正則表達式獲取你所需要的內容。
3.將你獲取的信息放入數據結構中,比如jason文件、txt文件、excel文件、mysql文件中,這裏我們由於信息少,放入list列表中並打印出來。

網頁解析

在這裏插入圖片描述
打開天大圖書館,輸入檢索字段python,可以得到上圖所示,此處爲第一頁,後面還有第二頁,第三頁;首先要清楚網頁鏈接檢索含義。

http://opac.lib.tju.edu.cn/opac/search?q=python&searchType=standard&isFacet=true&view=standard&rows=10&sortWay=pubdate_sort&sortOrder=desc&hasholding=1&searchWay0=marc&q0=&logical0=AND&page=1
#其中,檢索python字段爲連接中q=python,如果檢索爲matlab,則爲q=matlab;頁數則爲page=1,第二頁則爲page=2

清楚了網頁鏈接的含義,則需要開一下網頁源代碼,右鍵點擊打開源代碼。

<table class="resultTable">		
				<tr>
					<td width="20px">
						<input type="checkbox" name="bookItemCheckbox" 
							id="bookItem_992598" value="992598" />
					</td>
					<td width="20px">
						1. 
					</td>
					<td class="coverTD"> 
						<a href="javascript:bookDetail(992598,1,0);">
						<img class="bookcover_img" src="/opac/media/images/book-default-small.gif"  
							isbn="9783319963556"  bookrecno="992598"/>
						</a>
					</td>
					<td class="bookmetaTD" style="background-color:#F8F8F8">
						<div class="bookmeta" bookrecno="992598">
							<div>
								<span class="bookmetaTitle">
									<a href="javascript:bookDetail(992598,1,0);" id="title_992598">
										Optimization of Energy Supply Systems: Modelling, Programming and Analysis /
									</a>
									
								</span>
								<a href="javascript:bookDetail(992598,1,1);">
									<img border="0" title="在新窗口顯示詳細信息" src="/opac/media/images/newwin.png" />
								</a>
								&nbsp;
										<img src="/opac/media/images/rank_1.png" title="匹配度差"/>
									
								
								<span class="biblios_ordering" style="display: none;">
									訂購中
								</span>
								<span class="reservation_count" ></span>
								<!-- 湖北省館 -->	
								<!-- 如果有附件則顯示非書資料的圖標 -->
								
								<span id="attachment_992598" style="display: none;">
									<font color="green">(含光盤)</font>
								</span>
								
							</div>
							<div>著者:
								<a href="/opac/search?searchWay=author&q=by Janet Nagel." target="_blank"> 
									by Janet Nagel.
								</a>
							</div>
							<div>
								出版社: 
								<a href="/opac/search?searchWay=publisher&q=Springer International Publishing :" target="_blank"> 
									Springer International Publishing :
								</a>
								&nbsp;
								出版日期: 2019.
							</div>
							<div>
								文獻類型: 
								<img src="/opac/booktypeicon/6" class="booktypeIcon" />
								外文電子書, 
								索書號:
								<span class="callnosSpan"></span>
							</div>
						</div>
						<div class="expressServiceTab" id="express_tab_992598" 
							express_bookrecno="992598" express_isbn="9783319963556" express_bookmeta_loaded="0">
							<ul>
								<li><a id="holdingPreview_A_992598" href="#holdingPreviewDiv_992598">在館信息</a></li>
								<li><a href="#bookSimpleDetailDiv_992598">圖書信息概覽</a></li>
									<li class="hide" id="book_catalog_9783319963556"><a href="#bookCatalog_992598">圖書目錄</a></li>
									<li class="hide" id="book_preview_9783319963556"><a href="#bookPreview_992598">試讀信息</a></li>	
									<li class="hide" id="book_summary_9783319963556"><a href="#bookContentSummary_992598">內容簡介</a></li>
									<li class="hide" id="book_authorIntroduction_9783319963556"><a href="#bookAuthorIntroduction_992598">著者簡介</a></li>		
							</ul>
							<!--iframe id="holdingPreviewIFrame_992598" width="100%" frameborder="0">
							</iframe-->
							<div id="holdingPreviewDiv_992598" inittimes="0">
							</div>
							<div id="bookSimpleDetailDiv_992598">
								<iframe id="bookSimpleDetailIFrame_992598" width="100%" frameborder="0">
								</iframe>
							</div>	
								<div id="bookCatalog_992598"></div>
								<div id="bookPreview_992598"></div>
								<div id="bookContentSummary_992598"></div>
								<div id="bookAuthorIntroduction_992598"></div>	
						</div>
					</td>
				</tr>
.........................................此處省略n行
</table>

以上可以卡看出,所有書籍信息均放在< table>總標籤中,每一本書的信息又放在< tr>子標籤中,一層一層分析,找出書籍名稱,作者以及出處信息所在的標籤。

代碼

import requests
from bs4 import BeautifulSoup

def getHTMLText(url):
    try:
        r = requests.get(url,timeout=10)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print('獲取網頁異常!')
def HTML2List(list,html):
    soup = BeautifulSoup(html,'html.parser')
    for t in soup.findAll('td',attrs = {'class':'bookmetaTD'}):
        tds = t.find_all('a')
        book_name = tds[0].string.strip()
        ausor_name = tds[2].string.strip()
        chubanshe_name = tds[3].string.strip()
        list.append([book_name,ausor_name,chubanshe_name])
def printList(list):
    print('{:^20}{:^20}{:^20}'.format('書名','作者','出版社'))
    for i in range(len(list)):
        print('{:^20}{:^20}{:^20}'.format(list[i][0],list[i][1],list[i][2]))

def main():
    name = 'python'
    page = 2
    list = []
    for i in range(page):
        url = 'http://opac.lib.tju.edu.cn/opac/search?q=' + name +'&searchType=standard&isFacet=true&view=standard&rows=10&sortWay=pubdate_sort&sortOrder=desc&hasholding=1&searchWay0=marc&q0=&logical0=AND&page=' + str(i+1)
        html =getHTMLText(url)
        HTML2List(list,html)
        printList(list)
if __name__ == '__main__':
    main()

運行結果:

         書名                  作者                 出版社         
Optimization of Energy Supply Systems: Modelling, Programming and Analysis /  by Janet Nagel.   Springer International Publishing :
Computational Science/Intelligence & Applied Informaticsedited by Roger Lee.Springer International Publishing :
 利用Python開源工具分析惡意代碼  () 趙涏元 ... [] 著        人民郵電出版社       
     遊戲服務器架構與優化             蔡能著               機械工業出版社       
Elasticsearch大數據搜索引擎        羅剛編著              電子工業出版社       
     Python程序設計          () 約翰·策勒著           人民郵電出版社       
  MicroPython入門指南          邵子揚編著              電子工業出版社       
   Python機器學習基礎教程   () Andreas C. Müller, () Sarah Guido著      人民郵電出版社       
   Python物理學高效計算    () 安東尼·斯科普斯, () 凱瑟琳·赫夫著      人民郵電出版社       
   Python數字信號處理應用        () 艾倫·唐尼著           人民郵電出版社       
樹莓派實戰全攻略:Scratch、Python、Linux、Minecraft應用與機器人智能製作   () 斯圖爾特·沃特金斯著         人民郵電出版社       
    BGP路由協議排錯指南     () 維尼特·賈恩, () 布拉德·埃奇沃斯著      人民郵電出版社       
 Python與量化投資:從基礎到實戰        主編王小川等             電子工業出版社       
知識網絡與合作網絡的關係研究:基於Python編程        張曉黎著               格致出版社        
    蟲術:Python絕技             樑睿坤著              電子工業出版社       
 Diana10.1土木工程有限元分析         柴舜編著              南京大學出版社       
Python data science handbook =: Python數據科學手冊 / Jake VanderPlas著.        東南大學出版社,      
 零基礎學編程:樹莓派和Python          金學林著              電子工業出版社       
  從零開始學Python程序設計          吳惠茹等編著             機械工業出版社       
  Python數據分析與數據化運營          宋天龍著              機械工業出版社       

其中還有一些bug,以後再說2333333333

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章