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

爬取豆瓣的图书信息

2018-03-23 20:23 239 查看
emmm,感谢豆瓣提供的平台,爬也没那么多反爬虫机制。于是顺手爬了。。。
# coding:utf-8
# 采集豆瓣书信息和图片,写进数据库
from urllib import parse
from urllib import request
from lxml import etree
import json, pymysql
import time
biaoqianmen=[ '外国文学', '文学' , '随笔' ,
'中国文学' , '经典' , '日本文学' , '散文' ,
'村上春树' , '诗歌' , '童话' , '儿童文学' ,
'古典文学' , '王小波' , '杂文' , '名著',
'余华' , '张爱玲' , '当代文学' , '钱钟书' ,
'外国名著' , '鲁迅' , '诗词' , '茨威格' ,
'米兰·昆德拉' , '杜拉斯' , '港台' ,
'漫画 , 推理' , '绘本' , '青春' ,
'东野圭吾' , '科幻' , '言情' , '悬疑' ,
'奇幻' , '武侠', '日本漫画' , '韩寒' ,
'耽美' , '推理小说', '亦舒' , '三毛' ,
'网络小说' , '安妮宝贝', '郭敬明' , '穿越' ,
'金庸' , '阿加莎·克里斯蒂' , '轻小说' , '科幻小说' ,
'几米' , '青春文学' , '魔幻' , '幾米' ,
'张小娴' ,
'沧月' , '校园' , '落落' , '张悦然' ,
'历史' , '心理学' , '哲学' , '传记' ,
'文化' , '社会学' , '艺术' , '设计' ,
'社会', '政治', '建筑' , '宗教' ,
'电影 ','数学' , '政治学' , '回忆录' ,
'中国历史' , '思想' , '国学' , '人文' ,
'音乐 ', '人物传记' , '绘画' , '艺术史' ,
'戏剧 ', '佛教' , '军事' , '二战' ,
'西方哲学' , '近代史' , '考古' , '自由主义' ,
'美术 ',
'爱情 ', '旅行' ,
'励志 ', '心理' ,
'职场 ', '教育' ,
'灵修 ', '健康' ,
'两性 ', '养生' ,
'自助游' ,
'科普' , '互联网' , '编程' , '科学' ,
'交互设计' , '用户体验' , '算法' , '科技' , '通信' , '交互' ,'神经网络' , '程序' ,

]
url = 'https://book.douban.com/tag/'
headers = {
    'Host': 'book.douban.com',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'
}
content_dict_allli=[]
for k in biaoqianmen:
    print(k)
    try:
        for i in range(30):
            url = 'https://book.douban.com/tag/'
            url+=(parse.quote(k)+"?start="+str(i*20)+"&type=T")
            print(url)
            req = request.Request(url=url, headers=headers, method="GET")
            content = request.urlopen(req).read().decode("utf-8")
            content_dict = etree.HTML(content)  # 格式化
            content_dict_allli.extend(content_dict.xpath(r'//*[@id="subject_list"]/ul/li'))  # 拿到列表
            print(i)
            time.sleep(0.1)
    except Exception:
        pass
for li in content_dict_allli:
    try:
        time.sleep(0.01)
        # 书名/标题
        title_list = li.xpath(r'div[2]/h2/a/@title')  # 取标签里的内容,注意地址是相对地址,不能直接拿来用 (注:和bs4不一样)
        title = title_list[0]
        title = title.replace(" ", '')
        #print(title)
        # 信息 作者、出版社
        info_list = li.xpath(r'div[2]/div[1]/text()')
        author = info_list[0].split('/')[0]
        author = author.replace('\n', '').replace(" ", '')
        chubanshe = info_list[0].split('/')[1]
        #print(author)
        #print(chubanshe)
        # 评分
        pingfen_list = li.xpath(r'div[2]/div[2]/span[2]/text()')
        pingfen = pingfen_list[0]
        #print(pingfen)

        # 图片
        img_net_addr = li.xpath(r'div[1]/a/img/@src')
        img_net_addr = img_net_addr[0]
        #print(img_net_addr)
        #data = request.urlopen(img_net_addr).read()
        #img_name = 'F:\py3\爬虫系列\豆瓣\douban\\' + title + str('.jpg')
        #with open(img_name, 'wb')as f:
        #    f.write(data)

        #简介
        url=li.xpath(r'div[1]/a/@href')
        tushuurl=url[0]
        reqq = request.Request(url=tushuurl, headers=headers, method="GET")
        contentq = request.urlopen(reqq).read().decode("utf-8")
        jianjiedict = etree.HTML(contentq)  # 格式化
        #content_dict.xpath(r'//*[@id="subject_list"]/ul/li')
        wordf=jianjiedict.xpath(r'//*[@class="intro"]/p/text()')
        zuopingjianjie=wordf[0]
        zuozhe=wordf[1]
        biaoqian=jianjiedict.xpath(r'//a[@class="  tag"]/text()')
        kong=''
        for i in biaoqian:
            kong+=i
            kong+='#'
        # 数据库,请改为自己的数据库
        db = pymysql.connect(host='localhost', port=3306, user="", password='', db='douban', charset='utf8')  #
        cur = db.cursor()
        sql = "insert into douban(title,author,chubanshe,pingfen,picture,zuopingjianjie,zuozhe,biaoqian)values('%s','%s','%s','%s','%s','%s','%s','%s')" % (
        title, author, chubanshe, pingfen,img_net_addr,zuopingjianjie,zuozhe,kong)
        print(sql)
        cur.execute(sql)
        db.commit()
    except Exception:
        pass
db.close()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 爬虫 豆瓣