您的位置:首页 > 编程语言 > Python开发

python:使用requests和bs4爬去豆瓣图书信息

2017-11-18 22:32 531 查看
地址栏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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 爬虫