文章目录

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

一、任务

获取当当网上至少300本书【均为某类书,如python相关的书籍,或概率论相关的书籍】的信息,包括书名,网址,价格,作者,并存在excel表格中。

二、分析

(一)、单页面的信息分析

源代码分析

在当当网的搜索框输入“python”,出现搜索页面,并查看源代码。

<li ddt-pit="3" class="line3" id="p25333314">
<a title="Python从菜鸟到高手" ddclick="act=normalResult_picture&pos=25333314_2_1_q" class="pic" name="itemlist-picture"  dd_name="单品图片"href="http://product.dangdang.com/25333314.html"  target="_blank" >
<!--a标签的title中是书名信息,href中是网址信息,且对于每本书都是这样。而只有该标签才有 dd_name="单品图片" 的属性值-->     <img data-original='http://img3m4.ddimg.cn/6/6/25333314-1_b_2.jpg'
src='images/model/guan/url_none.png' alt=' Python从菜鸟到高手'/>
</a>
<p class="name" name="title" ><a title=" Python从菜鸟到高手JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送2400分钟同步视频课程!500个案例,400道Python练习题,电子书,10万行源代码,6个实战项目!"
href="http://product.dangdang.com/25333314.html"ddclick="act=normalResult_title&pos=25333314_2_1_q"name="itemlist-title" dd_name="单品标题"target="_blank" > <font class="skcolor_ljg">Python</font>从菜鸟到高手JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送2400分钟同步视频课程!500个案例,400道Python练习题,电子书,10万行源代码,6个实战项目!</a>
</p>
<p class="detail" >JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送2400分钟同步视频课程!500个案例,400道Python练习题,电子书,10万行源代码,6个实战项目! 李宁 私房菜谱 : ? Python语法基础 ? Python高级编程 ? Python Web开发 ? Python科学计算与数据分析 ? Python Web爬虫技术 ? Python项目实战 李宁 实战项目 : ? Web项目实战:基于Flask的美团网 ? Web项目实战:基于Django的58同城 ? 爬虫项目实战:天气预报服务API ? 爬虫项目实战:胸罩销售数据分析 ? GUI项目实战:动态修改域名指向的IP ? 游戏项目实战:俄罗斯方块
</p>
<p class="price" > <span class="search_now_price">&yen;112.60</span>
<!--span标签的内容是价格信息,且对于每本书都是这样。而只有该标签才有 class="search_now_price" 的属性值-->  <a class="search_discount"style="text-decoration:none;">定价:</a><span class="search_pre_price">&yen;128.00</span><span class="search_discount">&nbsp;(8.8折) </span>
</p>
<div class="lable_label"><span class="new_lable" y=""></span>
</div>
<p class="search_star_line" ><span class="search_star_black"><span style="width: 100%;"></span></span><a href="http://product.dangdang.com/25333314.html?point=comment_point"
target="_blank" name="itemlist-review" dd_name="单品评论" class="search_comment_num"
ddclick="act=click_review_count&pos=25333314_2_1_q">22条评论</a>
</p>
<span class="tag_box">
</span>
<p class="search_book_author"><span><a href='http://search.dangdang.com/?key2=李宁&medium=01&category_path=01.00.00.00.00.00'
name='itemlist-author' dd_name='单品作者' title='李宁'>李宁</a>
<!--a标签的title是作者信息,且对于每本书都是这样。但该标签没有唯一的可以定位的属性值-->
<!--a标签父标签p有唯一的属性class="search_book_author"-->  </span><span > /2018-09-01</span>   <span>  /<a href='http://search.dangdang.com/?key=&key3=%C7%E5%BB%AA%B4%F3%D1%A7%B3%F6%B0%E6%C9%E7&medium=01&category_path=01.00.00.00.00.00'
name='P_cbs' dd_name='单品出版社' title='清华大学出版社'>清华大学出版社</a></span>
<div class="shop_button">
<p class="bottom_p"><a  class='search_btn_cart' name='Buy' dd_name='加入购物车'
href='javascript:AddToShoppingCart(25333314)'ddclick='act=normalResult_addToCart&pos=25333314_2_1_q'>加入购物车</a><a class='search_btn_collect' name='collect' dd_name='加入收藏' id="lcase25333314" href="javascript:void(0);"name="Sc" ddclick='act=normalResult_favor&pos=25333314_2_1_q'>收藏</a>
</p>
</div>
</li>

目标信息定位与分析

序号 要获取的信息 定位信息 如何定位目标标签
1 书名 a标签的title属性 <a dd_name=“单品图片”]
2 网址 a标签的href属性 <a dd_name=“单品图片”]
3 价格 span标签的文本内容 < span class=“search_now_price”>
4 作者 p标签内部的第一个a标签的title属性 < p class=“search_book_author”>

备注:有些书是没有出版社的,因此本文不爬取出版社信息。

通过观察,可以发现,每个被定为的标签均出现60次【使用ctrl+F,在源代码页面进行页内搜索】,从而可判断,该页面上共有60本书。但每个页面上所放的商品书籍所占的页面面积不同,因此不一定每个页面都准确地有60本书,但会约在60本左右。

代码设计

#本程序需要安装BeautifulSoup库,pandas库#导入各种需要的模块
from urllib.request import urlopen      #查找python的request模块(在标准库urllib里面),只导入一个urlopen函数
from bs4 import BeautifulSoup           #导入BeautifulSoup库,该库通过定位HTML标签来组织复杂的网络信息#定义存放所需信息的列表
author = []                     #构造空列表,存放“作者”
price = []                      #构造空列表,存放“价格”
book = []                       #构造空列表,存放“书名”
link = []                       #构造空列表,存放“网址”#获取单个页面的书名,网址,价格,作者
def onePage(url):#生成某页面的HTML标签解析树html = urlopen(url)                     #打开并读取从网络获得的远程对象,即html页面bsObj = BeautifulSoup(html,"lxml")     #用lxml解析器对该对象html的标签进行解析,生成解析树#找出该页面的所有作者p_set = bsObj.findAll("p",{"class":"search_book_author"})   #在解析树中,找出所有的class="search_book_author"的p标签for p in p_set:                 #遍历p标签集合,对每个p标签进行提取a = p.find("a")             #提取每个p标签下的子标签中的第一个a标签author.append(a["title"])   #将a标签的title属性,即作者,放入author列表中#找出该页面的所有价格span_set = bsObj.findAll("span",{"class":"search_now_price"})   #在解析树中,找出所有的class="search_now_price"的span标签for span in span_set:           #遍历span标签集合,对每个span标签进行提取price.append(span.get_text())#span标签的文本内容即价格,放入price列表中#找出该页面的所有书名和该书的网址a_set = bsObj.findAll("a",{"dd_name":"单品图片"})   #在解析树中,找出所有的a标签,该标签的属性"dd_name"的属性值是"单品图片"for a in a_set:                 #遍历a标签集合,对每个a标签进行提取book.append(a["title"])     #提取a标签的属性title,即书名,放入列表book中link.append(a["href"])      #提取a标签的属性href,即该书网址,放入列表link中#检验是否每个页面的每本书都提取了四个信息,若否,则打印出的四个列表长度不一致print(len(book))print(len(link))print(len(author))print(len(price))

(二)、所有目标页面链接分析

目标链接分析

总共要爬取至少300本书的信息,每个页面上共约60本书,所以共须爬取至少5个页面。在当当网中的搜索框,输入”python”,可得到python书籍的搜索结果页面,观察可列出目标页面,如下所示:
http://search.dangdang.com/?key=python&act=input

http://search.dangdang.com/?key=python&act=input&page_index=2

http://search.dangdang.com/?key=python&act=input&page_index=3

http://search.dangdang.com/?key=python&act=input&page_index=4

http://search.dangdang.com/?key=python&act=input&page_index=5

可观察到,除了首页,其他目标页面的链接表达式具有规律性。但其实,可以猜测,首页的链接等同于 http://search.dangdang.com/?key=python&act=input&page_index=1,事实确实如此。

代码设计

#构造目标链接,共5个
for num in range(1,6):commonLink ="http://search.dangdang.com/?key=python&act=input&page_index="      #链接的公共部分url =commonLink+str(num)            #链接的不同部分onePage(url)                        #对每个页面进行信息提取#将四个信息列表合并为dataframe,并存到excel中
from pandas.core.frame import DataFrame
merge={"书籍":book,                      #将四个列表合并成字典"价格": price,"作者" : author,"网址":link}
data=DataFrame(merge)                    #将字典转换成为数据框
data.to_csv('result.csv')               #将数据框存储在当前文件所在的目录下的'result.csv'中

三、注意要点

1.确定每个被定位标签出现次数是一样的。如果不一样,则会出现,“作者”收集到60个,“书名”收集到70个,则结果出错。

2.确定同一个页面中每本书的标签结构都是一样的。若果不一样,则无法通过同一个函数去提取每本书的信息。

3.确定每个页面的标签结构都是一样的。如果不一样,则无法通过同一个函数去爬取所有的目标页面。

四、完整代码

备注:该代码只适合上面的逻辑,若要使用,一定要对代码进行修改,特别是网址部分。

#本程序需要安装BeautifulSoup库,pandas库#导入各种需要的模块
from urllib.request import urlopen      #查找python的request模块(在标准库urllib里面),只导入一个urlopen函数
from bs4 import BeautifulSoup           #导入BeautifulSoup库,该库通过定位HTML标签来组织复杂的网络信息#定义存放所需信息的列表
author = []                     #构造空列表,存放“作者”
price = []                      #构造空列表,存放“价格”
book = []                       #构造空列表,存放“书名”
link = []                       #构造空列表,存放“网址”#获取单个页面的书名,网址,价格,作者
def onePage(url):#生成某页面的HTML标签解析树html = urlopen(url)                     #打开并读取从网络获得的远程对象,即html页面bsObj = BeautifulSoup(html,"lxml")     #用lxml解析器对该对象html的标签进行解析,生成解析树#找出该页面的所有作者p_set = bsObj.findAll("p",{"class":"search_book_author"})   #在解析树中,找出所有的class="search_book_author"的p标签for p in p_set:                 #遍历p标签集合,对每个p标签进行提取a = p.find("a")             #提取每个p标签下的子标签中的第一个a标签author.append(a["title"])   #将a标签的title属性,即作者,放入author列表中#找出该页面的所有价格span_set = bsObj.findAll("span",{"class":"search_now_price"})   #在解析树中,找出所有的class="search_now_price"的span标签for span in span_set:           #遍历span标签集合,对每个span标签进行提取price.append(span.get_text())#span标签的文本内容即价格,放入price列表中#找出该页面的所有书名和该书的网址a_set = bsObj.findAll("a",{"dd_name":"单品图片"})   #在解析树中,找出所有的a标签,该标签的属性"dd_name"的属性值是"单品图片"for a in a_set:                 #遍历a标签集合,对每个a标签进行提取book.append(a["title"])     #提取a标签的属性title,即书名,放入列表book中link.append(a["href"])      #提取a标签的属性href,即该书网址,放入列表link中#检验是否每个页面的每本书都提取了四个信息,若否,则打印出的四个列表长度不一致print(len(book))print(len(link))print(len(author))print(len(price))#构造目标链接,共5个
for num in range(1,6):commonLink ="http://search.dangdang.com/?key=python&act=input&page_index="      #链接的公共部分url =commonLink+str(num)            #链接的不同部分onePage(url)                        #对每个页面进行信息提取#将四个信息列表合并为dataframe,并存到excel中
from pandas.core.frame import DataFrame
merge={"书籍":book,                      #将四个列表合并成字典"价格": price,"作者" : author,"网址":link}
data=DataFrame(merge)                    #将字典转换成为数据框
data.to_csv('result.csv')               #将数据框存储在当前文件所在的目录下的'result.csv'中

五、参考

《python网络数据采集》

python爬虫-爬取当当网书籍信息存到Excel中相关推荐

  1. Python |(爬虫 )爬取当当网书籍信息存到Excel中

    文献检索作业,小白也很无奈.还好有学霸同学的可以借鉴. 一.任务 获取当当网上至少300本书[均为某类书,如Linux相关的书籍,或C++相关的书籍]的信息,包括书名,网址,价格,作者,并存在exce ...

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

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

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

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

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

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

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

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

  6. [Python]scrapy爬取当当网书籍相关信息

    最近想买两本程序设计的书籍,也就在当当网上面看了下,发现真是太多的书了.所以想着利用爬虫知识爬取下程序设计相关书籍的一些信息. 00_1. 首先是今天所用到的东西 python 3.5 + scrap ...

  7. 爬虫项目实战十一:爬取当当网商品信息

    爬取当当网商品信息 目标 项目准备 网站分析 页码分析 反爬分析 代码实现 效果显示 目标 批量爬取当当网商品信息,保存为csv文件到本地. 项目准备 软件:Pycharm 第三方库:requests ...

  8. scrapy框架的简单使用——爬取当当网图书信息

    ** Scrapy爬取当当网图书信息实例 --以警察局办案为类比 ** 使用Scrapy进行信息爬取的过程看起来十分的复杂,但是他的操作方式与警局办案十分的相似,那么接下来我们就以故事的形式开始Scr ...

  9. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

最新文章

  1. SQL Server 死锁的告警监控
  2. HDU-1258 Sum It Up DFS
  3. New Year and Old Subsequence CodeForces - 750E(线段树+矩阵dp)2019南昌icpc网络赛Hello 2019
  4. 电气通用规范_与通用电气的对话使我了解到有关开放式组织的知识
  5. 如何手动配置IP地址
  6. Xshell远程连接配置 Ubuntu 18.04.6 + Anaconda + CUDA + Cudnn + Pytorch(GPU+CPU)
  7. 牙齿矫正价格降低一半,年轻人距离「牙套自由」还有多远?
  8. 野指针的成因_C语言
  9. 1.1 计算机语言发展史以及未来方向
  10. Python中的warnings模块详细阐述
  11. 从零到一搭建基础架构(2)-如何构建基础架构模块划分
  12. 用IMU监测力量训练中的杠铃速度,帮助科学界和体育界评估杠杆运动学
  13. 对短视频和技术的一些看法
  14. Spring Boot教程(三十四)使用Redis数据库(2)
  15. 理解van-field组件 :value 和 v-model的区别
  16. Excel如何将中文数字转为阿拉伯数字
  17. 用KEIL5打开KEIL4的文件
  18. 【外贸干货】开发信模板之售后客诉篇
  19. 乐队设备---均衡器的学习和使用
  20. redshift和谐版安装

热门文章

  1. 语音识别(1)四行代码,完成文本转换语音
  2. 初识Flink,简要介绍Flink
  3. 鲍尔默飙泪谈离职原因:董事会嫌我速度慢
  4. 毕业了,你有多少本钱?(文/徐小平)
  5. pg.Pool 的 query 用法
  6. (转)Lua之父采访记录
  7. oracle补丁集2020,Oracle发布2020年首批关键补丁更新,多达334个安全补丁
  8. 解析GPS车载终端的十大品牌
  9. 问题:电脑桌面黑频,不显示图标
  10. svg标记marker