在慕课网学习了python开发简单爬虫,爬取了python百度百科相关1000个词条页面。了解了简单爬虫的基本结构。为了进一步掌握简单爬虫,尝试着爬取豆瓣图书小说标签下的所有图书的书名,作者,评分,简介,并使用网页进行输出。
实现方式如下:
1.编写主调度函数:
豆瓣读书小说标签下,每页共20本图书,总共99页。url格式为“https://book.douban.com/tag/小说?start=(20的倍数)&type=T”,每页可获取到20本图书的url链接并进行爬取小说的具体信息。循环99次,可完成本次爬取目标。中间加入异常处理,防止有些图书的url失效等异常情况。加入time.sleep(),每次爬取后停止一段时间,防止豆瓣的反爬虫识别出程序导致爬虫失败。
#coding=UTF-8
from douban import d_urlmanagement, d_httpdownloader, d_httpparser,\
d_httpoutputer
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class DoubanMain(object):
def __init__(self):
self.durls=d_urlmanagement.Durlmanagement()
self.ddownload=d_httpdownloader.Dhttpdownloader()
self.dparser=d_httpparser.Dhttpparser()
self.doutputer=d_httpoutputer.Dhttpoutputer()
def crow(self):
pag_num=0
while(1):
#https://book.douban.com/tag/小说?start=40&type=T
url='https://book.douban.com/tag/小说'+'?start='+str(pag_num*20)+'&type=T'
print '%d page'%pag_num
time.sleep(0.1)
html_cont=self.ddownload.download(url)
new_urls=self.dparser.parser(html_cont,url)
self.durls.add_new_urls(new_urls)
n=1
while self.durls.has_new_url():
try:
book_url= self.durls.get_new_url()
time.sleep(0.1)
book_cont=self.ddownload.download(book_url)
new_datas=self.dparser.book_parser(book_url,book_cont)
self.doutputer.collectdata(new_datas)
print n
n=n+1
except:
print 'error'
continue
if pag_num >=51:
break
pag_num = pag_num +1
self.doutputer.ouput()
if __name__=='__main__':
douban=DoubanMain()
douban.crow()
2.编写url管理器:
url管理器,用于豆瓣读书小说标签页下每页的20本图书的url保存及提取。
#coding=UTF-8