爬取豆瓣的图书信息
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()
# 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()
相关文章推荐
- C#基于豆瓣API查询图书信息
- python 实现用ISBN从豆瓣获取图书信息
- python:使用requests和bs4爬去豆瓣图书信息
- jackson学习----解析豆瓣的图书信息
- 通过豆瓣Api,输入ISBN获取图书信息
- PHP 抓取豆瓣图书信息
- Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129
- 个人电子图书馆【一】通过豆瓣API获取图书详细信息
- 使用ISBN码通过豆瓣API获取图书信息(ThinkPHP)
- 通过豆瓣Api,输入ISBN获取图书信息
- Python爬虫爬取豆瓣图书的信息和封面,放入MySQL数据库中。
- 【分享】利用豆瓣API根据ISBN查询图书信息
- 爬取豆瓣图书Top250书籍信息
- 根据ISBN获取豆瓣API提供的图书信息
- python爬虫实现获取豆瓣图书的top250的信息-beautifulsoup实现
- python爬虫之豆瓣图书信息几行字
- C# 通过豆瓣网络编程API获取图书信息
- Python爬取豆瓣图书信息学习记录
- 豆瓣获取图书信息
- 【分享】利用豆瓣API按照关键词或TAG搜索图书信息