python:使用requests和bs4爬去豆瓣圖書信息

地址欄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當沒有圖書信息時,多試幾次

完整代碼:https://github.com/YoungChild/douban_python

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