地址欄url格式
https://book.douban.com/tag/小說?start=0&type=T
真實url
https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=0&type=T
在地址欄顯示的是小說可是真實的URL是個並不是圖書2個字,而是一串亂碼
可以用urllib.quote()進行轉換
其中第一頁start=0
每向後一頁,+20
由於有的書的信息不全(比如當點評人數不足時,沒有評分,所以用了很多的try,不然很容易會出錯停止)
#讀取每本書的信息
for i in xrange(len(all_books)):
try:
book_name = all_books[i].find('a', attrs={'title': True}).get('title').strip().encode('utf-8')
except:
book_name = '書名讀取失敗'
try:
book_url = all_books[i].find('a', attrs={'title': True}).get('href').strip().encode('utf-8')
except:
book_url = 'URL讀取失敗'
try:
book_wdp = all_books[i].find('div', attrs={'class': 'pub'}).get_text().strip().encode('utf-8').split('/')
except:
book_wdp = ['讀取失敗', '讀取失敗', '讀取失敗']
try:
book_writer = book_wdp[0].strip()
except:
book_writer = '讀取失敗'
try:
book_date = book_wdp[-2].strip()
except:
book_date = '讀取失敗'
try:
book_price = book_wdp[-1].strip()
except:
book_price = 0
try:
book_rating = float(all_books[i].find('div', attrs={'class': 'star clearfix'}).find('span', attrs={'class': 'rating_nums'}).get_text().strip().encode('utf-8'))
except:
book_rating = 0.0
try:
book_p_num = int(all_books[i].find('div', attrs={'class': 'star clearfix'}).find('span', attrs={'class': 'pl'}).get_text().strip().encode('utf-8')[1: -10])
except:
book_p_num = 0
book_list.append([book_name, book_url, book_writer, book_date, book_price, book_rating, book_p_num])
爬的過程中的問題:
1、一共多少頁的問題,在mmjpg中,我是通過找到網頁上一共有多少張來解決的,但是豆瓣上顯示100頁,其實是沒有100頁的,小說會在50頁左右就沒有了,所以以前的方法行不通。
於是我設置了一個死循環,當找不到圖書信息時,break。不然每次都往後一頁
爲了防止可能會出現其他的情況,我設置了一個try_times當沒有圖書信息時,多試幾次