#encoding:utf-8##author:wuhao#

#******

#爬取当当网图书,未使用框架

#main是主函数

#KindLinks.py和 获取数据信息.py 是2个封装的类

#KindLinks只有一个方法,它返回的是 listUrl---(name(小分类名称),url(小分类对应的链接)) LB---(总的分类)

#获取数据信息有2个方法,---getpage(),getinfo() getpage()返回的是页码数,getinfo()返回的是每本书中的信息(书名,评论数,作者,出版社,价格,出版日期) 书名我没有进行进一步的解析,可能比较杂乱


#当当网商品种类链接,获取不同种类的所有图书from bs4 import BeautifulSoupclass _FirstPageLinkToGetUrl():def __init__(self,opener):self.opener=openerself.url="http://category.dangdang.com/?ref=www-0-C"def getDifferentSeriesBookUrl(self):html=self.opener.open(self.url).read().decode("gbk")soup=BeautifulSoup(html,"html.parser")#类别LB = []# 字典存储小类别对应的URL#dictUrl = {}#
        temp=0listUrl=[]count=[]#outside  ---外层的div#_li      ---li层for outsideDiv in soup.find("div", class_="classify_books", id="floor_1").find_all("div", class_="classify_kind"):LB.append(outsideDiv.div.a.string)temp=0dictUrl={}for _li in outsideDiv.find("ul").find_all("li"):if _li.a.string == "更多":continueelse:# print(s.a.get("href"), s.a.string)temp+=1dictUrl[_li.a.string] = _li.a.get("href")count.append(temp)listUrl.append(dictUrl)return listUrl,LB

#获取网页中包含的图书的信息from bs4 import BeautifulSoup
import re
class _GetBookInfo():def __init__(self,opener):self.opener=openerdef getPage(self,url):html = self.opener.open(url)html = html.read().decode("gbk")  # 网页数据with open("test.txt","w") as f:f.write(html)regex=re.compile("<span>/\d+</span>")valueNum=re.findall("\d+",regex.findall(html)[0])return int(valueNum[0])def getInfo(self,url):html = self.opener.open(url).read().decode("gbk")soup = BeautifulSoup(html,"html.parser")ulTag=soup.find("ul",class_="list_aa listimg",id=True)liTag=ulTag.find_all("li",id=True)data1=[]#遍历liTagtemp=0for li in liTag:data = []try:data.append(li.find("p",class_="name").string)data.append(li.find("p",class_="star").a.string)data.append(li.find("p",class_="author").a.string)data.append(li.find("p",class_="publishing").a.string)data.append(li.find("p",class_="price").span.string)data.append(re.findall(r"/ .+ ",str(li.find("p", class_="publishing_time")))[0].replace(" ","").replace("/",""))data1.append(data)except:continue#print(data)return data1#
'''def getDifferentSeriesBookUrl(self):html=self.opener.open(self.url).read().decode("gbk")soup=BeautifulSoup(html)#类别LB = []# 字典存储小类别对应的URLdictUrl = {}#outside  ---外层的div#_li      ---li层for outsideDiv in soup.find("div", class_="classify_books", id="floor_1").find_all("div", class_="classify_kind"):LB.append(outsideDiv.div.a.string)for _li in outsideDiv.find("ul").find_all("li"):if _li.a.string == "更多":continueelse:# print(s.a.get("href"), s.a.string)dictUrl[_li.a.string] = _li.a.get("href")return dictUrl,LB
'''

#-encoding:utf-8
from 当当网图书爬取 import 获取数据信息 as bookInfo
from 当当网图书爬取 import KindLinks as kls
from bs4 import BeautifulSoup
import urllib.request
import urllib.parse
import http.cookiejar
import re
import xlwt
import xlrddef getCorrectUrl(url,page):if page==0:  return urlurl=url.replace("m/","m/pg"+str(page)+"-")return url#url,当当网所有商品网页
url="http://category.dangdang.com/?ref=www-0-C"
#创建实例化对象
Cookie=http.cookiejar.CookieJar()
#创建处理器
CookieHandle=urllib.request.HTTPCookieProcessor(Cookie)
#创建opener
opener=urllib.request.build_opener(CookieHandle)
#模拟浏览器登录
header=\{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"}
head=[]
for key,value in header.items():elem=(key,value)head.append(elem)
opener.addheaders=head
#打开一次网页让opener具备Cookie
opener.open(url)#首先获取相关链接从KindLinks
_kls=kls._FirstPageLinkToGetUrl(opener)
#书籍的链接数据
bdata=_kls.getDifferentSeriesBookUrl()bdata_url=bdata[0]          #包含所有需要用的url
bdata_gd=bdata[1]           #大体描述
#bdata_count=bdata[2]        #每取出多少个url,创建一个表格
#把字典转换为list存储
bdata_url_name=[]
bdata_url_url=[]
print((list(bdata_url[0].values())))
for key in range(len(bdata_url)):bdata_url_url.append(list(bdata_url[key].values()))bdata_url_name.append(list(bdata_url[key].keys()))
print(bdata_url_name)
print(bdata_url_url[0])
#实例化对象
bio=bookInfo._GetBookInfo(opener)
#在excel中存储的格式
StyleinfoInExcel=["书名","评论数","作者","出版社","价格","出版日期"]
book=xlwt.Workbook(encoding="utf-8")
#用于统计总计书的数量
count=0for _gd in range(len(bdata_url)):for _bdata in range(len(bdata_url_name[_gd])):page = bio.getPage(bdata_url_url[_gd][_bdata])           #获取页码数sheetname=bdata_url_name[_gd][_bdata].replace("/", "-")try:sheet=book.add_sheet(sheetname=sheetname)except:continueprint(sheetname+"正在写入...")for i in range(len(StyleinfoInExcel)):sheet.write(0,i,StyleinfoInExcel[i])#进行数据的读取和写入temp=0for CurrentPage in range(1,page,1):                                             #CurrentPage为实际爬取到的网页页码try:data=bio.getInfo(getCorrectUrl(bdata_url_url[_gd][_bdata],CurrentPage))          #数据保存到data中#将数据写入到Excelfor i in range(len(data)):temp+=1for j in range (len(data[i])):#print(data[i][j],end=" ")sheet.write(temp,j,data[i][j])count+=1except:continueprint("已写入"+str(count)+"本书")print(sheetname+"写入完成...\r\n")if _bdata==len(bdata_url_name[_gd])-1:book.save(bdata_gd[_gd].replace("/","-")+".xls")book = xlwt.Workbook(encoding="utf-8")print("--------已完成"+bdata_gd[_gd])#
print("写入完成,共计"+str(count)+"本书")

#没有进行并发处理,所以在爬去过程中耗时很长,这里的图书写入的数量一共是1280000万册,还有部分未爬取完,此程序尚需进一步的完善。#此程序只是本人作为练手而写的小程序,数据并没有清洗的很干净

  

转载于:https://www.cnblogs.com/one-lightyear/p/6659350.html

爬虫之获取当当网全部图书相关推荐

  1. 利用python爬虫可视化分析当当网的图书数据

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 **Python版本:**3.6.4 相关模块: requests模块: bs4模块: wordclo ...

  2. python爬虫beautifulsoup爬当当网_利用python爬虫可视化分析当当网的图书数据!

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 Python版本:3.6.4 相关模块: requests模块: bs4模块: wordcloud模块 ...

  3. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

  4. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  5. 出版社给了些当当网计算机图书特优惠码

    当当网计算机图书 每满100减50! 每满200减100! 每满400减200! 满600减300! 机械工业出版社华章公司联合当当网特意为[Java乐园]用户申请了一批可与满减叠加使用的" ...

  6. python 爬虫 爬取当当网图书信息

    初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...

  7. python爬虫-爬取当当网书籍信息存到Excel中

    文章目录 一.任务 二.分析 (一).单页面的信息分析 源代码分析 目标信息定位与分析 代码设计 (二).所有目标页面链接分析 目标链接分析 代码设计 三.注意要点 四.完整代码 五.参考 一.任务 ...

  8. Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息

    XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我 ...

  9. 当当网自营图书数据(183万图书数据及182万图片数据)

    本文原创作者: 数据超市 (http://www.data-shop.net) 本文原始链接:http://www.data-shop.net/2018/07/book_dangdang-201805 ...

最新文章

  1. 全网第一SoTA成绩却朴实无华的PyTorch版EfficientDet
  2. 026-请问你怎么测试网络协议
  3. python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解
  4. 喜报!在行签约神策数据
  5. 如何成为CSDN博客专家
  6. NOIP2008提高组(前三题) -SilverN
  7. 编写程序乘法口诀表C语言,陈广川问:c语言编程九九乘法口诀表 怎样用c语言写九九乘法口诀表?...
  8. Eureka 简介和使用
  9. list的contains方法为什么不好使_道理都懂,为什么我们还打不好网球?
  10. ListView(1)
  11. python pytest框架
  12. IaaS、PaaS、SaaS、BaaS、FaaS、APaaS、IPaaS、IDaaS、DaaS
  13. java name_Java枚举name()方法及示例
  14. .NET Core 中 IOptions 有什么用
  15. iOS开发SDWebImage源码解析之SDWebImageManager的注解
  16. IT黑马之用户信息管理系统
  17. 数据中心服务器机柜电气参数,数据中心服务器机柜选择指南
  18. 微信小程序云开发--上传图片到云存储获取并展示云存储里的图片
  19. [linux虚拟机] 使用yum命令时,解析不了yum源,Cannot find a valid baseurl for repo: base/7/x86_6
  20. 数字图像处理 低通、高通、带阻和带通滤波器

热门文章

  1. React 之 Refs 的使用和 forwardRef 的源码解读
  2. matlab调用函数出nan,求助:Matlab的fmincon函数出现RCOND = NaN
  3. Linux常用命令(2)- - -Linux达人养成计划I
  4. 物联网设备快速入网的方式
  5. 存储资源盘活系统打造智慧医疗数据根基
  6. 直播、会员、营销……陌陌未来究竟靠什么赚大钱?
  7. 自己编写的一个截图工具
  8. 移动互联网 网民高达6.86亿
  9. 2023 王者荣耀战力查询HTML源码 附接口
  10. php使用curl请求时,以x-www-form-urlencoded 方式发送遇到的问题