基於Python,爬取豆瓣讀書原始碼
阿新 • • 發佈:2019-01-27
記得上次分享了一個抓取豆瓣妹子美女圖片的指令碼,今天給大家分享一個爬取豆瓣讀書的原始碼,也算是做個記錄吧,目前已經在學習程式設計的路上,以後要是想寫什麼爬蟲也可以參考參考自己收藏的一些程式碼,嗯,雖然我還是個程式碼小白,不過相信有一天我也能很輕鬆的寫出這樣的程式碼,加油!我不是作者,我只是勤勞的搬運工!
貼出部分程式碼,原始碼到文章底部下載:
#!/usr/bin/env python # encoding: utf-8 # 把str編碼由ascii改為utf8(或gb18030) import sys reload(sys) sys.setdefaultencoding('utf8') import time import requests from bs4 import BeautifulSoup file_name = 'book_list.txt' file_content = '' # 最終要寫到檔案裡的內容 file_content += '生成時間:' + time.asctime() def book_spider(book_tag): global file_content url = "http://www.douban.com/tag/%s/book" % book_tag source_code = requests.get(url) # just get the code, no headers or anything plain_text = source_code.text # BeautifulSoup objects can be sorted through easy soup = BeautifulSoup(plain_text) title_divide = '\n' + '--' * 30 + '\n' + '--' * 30 + '\n' file_content += title_divide + '\t' * 4 + \ book_tag + ':' + title_divide count = 1 # 得到書籍列表的soup物件 list_soup = soup.find('div', {'class': 'mod book-list'}) for book_info in list_soup.findAll('dd'): title = book_info.find('a', { 'class':'title'}).string.strip() desc = book_info.find('div', {'class':'desc'}).string.strip() desc_list = desc.split('/') author_info = '作者/譯者: ' + '/'.join(desc_list[0:-3]) pub_info = '出版資訊: ' + '/'.join(desc_list[-3:]) rating = book_info.find('span', { 'class':'rating_nums'}).string.strip() file_content += "*%d\t《%s》\t評分:%s\n\t%s\n\t%s\n\n" % ( count, title, rating, author_info, pub_info) count += 1 def do_spider(book_lists): for book_tag in book_lists: book_spider(book_tag) book_lists = ['心理學','人物傳記','中國歷史','旅行','生活','科普'] do_spider(book_lists) # 將最終結果寫入檔案 f = open(file_name, 'w') f.write(file_content) f.close()
原始碼檔案說明:
doubanBook:爬取豆瓣讀書。只爬取了每個標籤類別的首頁的圖書資訊,若稍加修改,可以爬取任意頁數的資訊。
bookCrawler2:爬取每個熱門標籤下的書籍基本資訊,儲存到MySQL中。因為有些資料的格式不符合要求,實際爬取數量為60000+。稍作修改,可以拓展功能,或者做些其他有趣的事情。
bookCrawler3:上一個爬蟲的全面升級。只爬取“程式設計”標籤下的書籍,但這次爬取了書籍詳情頁面和書籍圖片,並且使用了多執行緒,速度提高很多。
bookSearch:另外,在嘗試用wxPython做一個圖形化的書籍檢索頁面,更好地利用爬取成果。目前只做了最簡單的實現。
getWebpage:儲存指定URL的頁面到本地。
qiushibaike:爬取糗事百科的內容,輸出到命令列。
proxyInfo:爬取某個代理頁面的資訊,輸出到控制檯。