地址栏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当没有图书信息时,多试几次