因为做毕业课设, 想做一个 关于图书的 智能客服机器人
但是, 要做图书的客服机器人,就需要有数据,所以,我选定了从豆瓣那里获取数据
那么,第一步, 我是首先获取所有的热门 标签
##使用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下一步就是获取 所有图书的信息