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

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