我是怎么扒光了豆瓣图书系列 1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35396598/article/details/87915434

因为做毕业课设, 想做一个 关于图书的 智能客服机器人

但是, 要做图书的客服机器人,就需要有数据,所以,我选定了从豆瓣那里获取数据

那么,第一步, 我是首先获取所有的热门 标签

##使用selenium
from selenium import webdriver
import time
from bs4     import BeautifulSoup
from lxml import etree
#browser = webdriver.Firefox()

#browser.get("https://book.douban.com/tag")
#print(browser.page_source)
#soup = BeautifulSoup(browser.page_source, 'lxml')  # 解析器:html.parser
#####首先是获取所有的类型
#daleixing=soup.find_all('a',class_=['tag-title-wrapper'])
#xiaoleixing=soup.find_all('a',attrs={'href':True})

#print(xiaoleixing)

得到所有的热门标签

xiao=[
    '小说', '外国文学', '文学', '随笔', '中国文学', '经典','日本文学', '散文', '村上春树', '诗歌', '童话', '儿童文学','古典文学', '名著', '王小波', '杂文', '余华', '张爱玲', '当代文学', '钱钟书', '外国名著','鲁迅', '诗词', '茨威格', '米兰·昆德拉', '杜拉斯', '港台',
    '漫画', '推理', '绘本', '青春',
    '东野圭吾', '科幻', '悬疑', '言情', '奇幻', '武侠', '日本漫画', '推理小说', '耽美', '韩寒',
    '亦舒', '网络小说', '三毛', '安妮宝贝', '科幻小说', '阿加莎·克里斯蒂', '金庸', '穿越', '郭敬明',
    '轻小说', '青春文学', '魔幻', '几米', '幾米', '张小娴', 'J.K.罗琳', '古龙', '高木直子', '沧月', '校园',
    '落落', '张悦然',

    '历史', '心理学', '哲学', '传记', '社会学', '文化', '艺术', '社会', '设计', '政治', '建筑',
    '宗教', '电影', '政治学', '数学', '中国历史', '回忆录', '思想', '国学', '人物传记', '人文', '艺术史', '音乐', '绘画',
    '戏剧', '西方哲学', '二战', '近代史', '军事', '佛教', '考古', '自由主义', '美术',

    '爱情', '成长', '旅行', '生活',
    '心理', '励志', '女性', '摄影', '教育', '职场', '美食', '游记', '灵修', '健康', '情感', '人际关系', '两性', '手工',
    '养生', '家居', '自助游',


    '经济学', '管理', '经济', '商业', '金融', '投资', '营销', '理财', '创业', '广告', '股票', '企业史', '策划',

    '科普','互联网', '编程', '科学', '交互设计', '用户体验', '算法', '科技', 'web', 'UE', '交互', '通信', 'UCD', '神经网络', '程序']

然后就是通过标签, 去慢慢遍历所有的网页

from lxml import etree
import requests
import time
###获取页数
def huoquyeshu(tage):
    liulanqi = requests.session()
    url='https://book.douban.com/tag/'+tage
    d=liulanqi.get(url=url)
    ye = d.content.decode()
    yemian = etree.HTML(ye)  # 格式化
    #//*[@id="subject_list"]/div[2]/a[10]
    ###获取页面数
    yemianshu=yemian.xpath(r'//*[@id="subject_list"]/div[2]/a')
    if len(yemianshu)==0:
        return 1
    else:
        zuihouyige=yemianshu[-1]
        #print(zuihouyige)
        #print(zuihouyige.xpath(r'text()'))
        return int(zuihouyige.xpath(r'text()')[0])
def huoquyemian(tage,num):
    liulanqi = requests.session()
    url='https://book.douban.com/tag/'+tage+'?start='+str(20*num)+'&type=T'
    d=liulanqi.get(url=url)
    ye = d.content.decode()
    yemian = etree.HTML(ye)  # 格式化
    #print(yemian)
    xiaoshuo1=yemian.xpath(r'//div[@class="info"]')
    #yemian.xpath(r'//li[@id="subject_list"]/ul/li[1]/div[2]/h2/a/text()') ['\n\n    解忧杂货店\n\n\n    \n\n  ']
    #print(xiaoshuo1)
    if xiaoshuo1=='' or xiaoshuo1==None or xiaoshuo1==[]:
        return 0
    else:
        mm=xiaoshuo1[0]

    ##获取所有的小说名字
    xiaoshuoming=mm.xpath(r'//div/h2/a/text()')


    ##获取小说地址
    urla=mm.xpath(r'//div/h2/a/@href')
    if len(urla)==0:
        return  0
    liulanqi.close()
    filename=tage+'.txt'
    d = open(filename, mode='a+', encoding='utf-8')
    for cle in range(len(xiaoshuoming)):
        xiaoshuoming[cle]=xiaoshuoming[cle].replace('\n','')
        xiaoshuoming[cle] = xiaoshuoming[cle].replace(' ', '')
    xiaoshuomingzi=[i for i in xiaoshuoming if i != '']

    if len(urla)==len(xiaoshuomingzi):
        for xu,ss in enumerate(xiaoshuomingzi):
            mingzi=xiaoshuomingzi[xu].replace('\n','')
            mingzi=mingzi.replace(' ','')
            urls=urla[xu].replace('\n','')

            d.writelines(mingzi+"  ")
            d.writelines(urls)
            d.writelines('\n')
    d.close()
    return  1

    # browser = webdriver.Firefox()
    # browser.get("https://book.douban.com/tag")
    # print(browser.page_source)
    # soup = BeautifulSoup(browser.page_source, 'lxml')  # 解析器:html.parser
    pass
xiao=[
    '小说', '外国文学', '文学', '随笔', '中国文学', '经典','日本文学', '散文', '村上春树', '诗歌', '童话', '儿童文学','古典文学', '名著', '王小波', '杂文', '余华', '张爱玲', '当代文学', '钱钟书', '外国名著','鲁迅', '诗词', '茨威格', '米兰·昆德拉', '杜拉斯', '港台',
    '漫画', '推理', '绘本', '青春',
    '东野圭吾', '科幻', '悬疑', '言情', '奇幻', '武侠', '日本漫画', '推理小说', '耽美', '韩寒',
    '亦舒', '网络小说', '三毛', '安妮宝贝', '科幻小说', '阿加莎·克里斯蒂', '金庸', '穿越', '郭敬明',
    '轻小说', '青春文学', '魔幻', '几米', '幾米', '张小娴', 'J.K.罗琳', '古龙', '高木直子', '沧月', '校园',
    '落落', '张悦然',

    '历史', '心理学', '哲学', '传记', '社会学', '文化', '艺术', '社会', '设计', '政治', '建筑',
    '宗教', '电影', '政治学', '数学', '中国历史', '回忆录', '思想', '国学', '人物传记', '人文', '艺术史', '音乐', '绘画',
    '戏剧', '西方哲学', '二战', '近代史', '军事', '佛教', '考古', '自由主义', '美术',

    '爱情', '成长', '旅行', '生活',
    '心理', '励志', '女性', '摄影', '教育', '职场', '美食', '游记', '灵修', '健康', '情感', '人际关系', '两性', '手工',
    '养生', '家居', '自助游',


    '经济学', '管理', '经济', '商业', '金融', '投资', '营销', '理财', '创业', '广告', '股票', '企业史', '策划',

    '科普','互联网', '编程', '科学', '交互设计', '用户体验', '算法', '科技', 'web', 'UE', '交互', '通信', 'UCD', '神经网络', '程序']
for  qwe in xiao:
    duoshao=huoquyeshu(qwe)
    print("当前type为"+qwe)
    for m in range(duoshao):
        time.sleep(0.5)
        print("当前页数为",str(m)," type  "+qwe)
        jie=huoquyemian(tage=qwe,num=m)
        if jie==0:
            break
#huoquyeshu('程序')
#huoquyeshu('小说')

最终得到所有的书籍,和对应的ID

PS下一步就是获取 所有图书的信息

猜你喜欢

转载自blog.csdn.net/qq_35396598/article/details/87915434