Python |(爬虫 )爬取当当网书籍信息存到Excel中
文献检索作业,小白也很无奈。还好有学霸同学的可以借鉴。
一、任务
获取当当网上至少300本书【均为某类书,如Linux相关的书籍,或C++相关的书籍】的信息,包括书名,网址,价格,作者,并存在excel表格中。
二、分析
(一)、单页面的信息分析
源代码分析
在当当网的搜索框输入“Linux”,出现搜索后的页面,按F12查看源代码。
<li ddt-pit="1" class="line1" id="p25345462" sku="25345462">
<a title=" 鸟哥的Linux私房菜 基础学习篇 第四版" ddclick="act=normalResult_picture&pos=25345462_0_1_q" class="pic" name="itemlist-picture" dd_name="单品图片" href="http://product.dangdang.com/25345462.html" target="_blank">
<!--a标签的title中是书名信息,href中是网址信息,且对于每本书都是这样。而只有该标签才有 dd_name="单品图片" 的属性值--><img src="http://img3m2.ddimg.cn/76/18/25345462-1_b_11.jpg" alt=" 鸟哥的Linux私房菜 基础学习篇 第四版">
</a>
<p class="name" name="title"><a title=" 鸟哥的Linux私房菜 基础学习篇 第四版畅销Linux入门书升级版 鸟哥教你从入门到精通 适用Linux系统应用和开发及运维的人员 涵盖linux内核 命令行 嵌入式 Shell与Shell Scripts技巧精粹 基于CentOS 7.x" href="http://product.dangdang.com/25345462.html" ddclick="act=normalResult_title&pos=25345462_0_1_q" name="itemlist-title" dd_name="单品标题" target="_blank"> 鸟哥的<font class="skcolor_ljg">Linux</font>私房菜 基础学习篇 第四版畅销Linux入门书升级版 鸟哥教你从入门到精通 适用Linux系统应用和开发及运维的人员 涵盖linux内核 命令行 嵌入式 Shell与Shell Scripts技巧精粹 基于CentOS 7.x</a>
</p>
<p class="detail">※ 鸟哥倾囊相授,(中简略),内容更加精彩!
</p>
<p class="price"> <span class="search_now_price">¥113.30</span>
<!--span标签的内容是价格信息,且对于每本书都是这样。而只有该标签才有 class="search_now_price" 的属性值--> <a class="search_discount" style="text-decoration:none;">定价:</a><span class="search_pre_price">¥118.00</span><span class="search_discount"> (9.61折) </span>
</p>
<div class="lable_label"><span class="new_lable" y=""><span class="new_lable1">当当自营</span></span>
</div>
<p class="search_star_line"><span class="search_star_black"><span style="width: 100%;"></span></span><a href="http://product.dangdang.com/25345462.html?point=comment_point" target="_blank" name="itemlist-review" dd_name="单品评论" class="search_comment_num" ddclick="act=click_review_count&pos=25345462_0_1_q">13条评论</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></span><span> /2018-11-01</span><span> /<a href="http://search.dangdang.com/?key=&key3=%C8%CB%C3%F1%D3%CA%B5%E7%B3%F6%B0%E6%C9%E7&medium=01&category_path=01.00.00.00.00.00" name="P_cbs" dd_name="单品出版社" title="人民邮电出版社">人民邮电出版社</a></span>
</p>
<div class="shop_button">
<p class="bottom_p"><a class="search_btn_cart " name="Buy" dd_name="加入购物车" href="javascript:AddToShoppingCart(25345462)" ddclick="act=normalResult_addToCart&pos=25345462_0_1_q">加入购物车</a><a class="search_btn_collect" name="collect" dd_name="加入收藏" id="lcase25345462" href="javascript:void(0);" ddclick="act=normalResult_favor&pos=25345462_0_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”> |
代码设计
#本程序需要安装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))
安装BeautifulSoup库,pandas库
python -m pip install --upgrade pip(我的pip版本比较旧,就更新了一下)
(二)、所有目标页面链接分析
目标链接分析
总共要爬取至少300本书的信息,每个页面上共约60本书,所以共须爬取至少5个页面。在当当网中的搜索框,输入”python”,可得到python书籍的搜索结果页面,观察可列出目标页面,如下所示:
http://search.dangdang.com/?key=Linux&act=input&page_index=2
http://search.dangdang.com/?key=Linux&act=input&page_index=3
http://search.dangdang.com/?key=Linux&act=input&page_index=4
http://search.dangdang.com/?key=Linux&act=input&page_index=5
代码设计
#构造目标链接,共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 |(爬虫 )爬取当当网书籍信息存到Excel中相关推荐
- python爬虫-爬取当当网书籍信息存到Excel中
文章目录 一.任务 二.分析 (一).单页面的信息分析 源代码分析 目标信息定位与分析 代码设计 (二).所有目标页面链接分析 目标链接分析 代码设计 三.注意要点 四.完整代码 五.参考 一.任务 ...
- Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息
XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我 ...
- python 爬虫 爬取当当网图书信息
初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...
- python爬虫爬取当当网的商品信息
python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...
- 在当当买了python怎么下载源代码-python爬虫爬取当当网
[实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...
- [Python]scrapy爬取当当网书籍相关信息
最近想买两本程序设计的书籍,也就在当当网上面看了下,发现真是太多的书了.所以想着利用爬虫知识爬取下程序设计相关书籍的一些信息. 00_1. 首先是今天所用到的东西 python 3.5 + scrap ...
- 爬虫项目实战十一:爬取当当网商品信息
爬取当当网商品信息 目标 项目准备 网站分析 页码分析 反爬分析 代码实现 效果显示 目标 批量爬取当当网商品信息,保存为csv文件到本地. 项目准备 软件:Pycharm 第三方库:requests ...
- scrapy框架的简单使用——爬取当当网图书信息
** Scrapy爬取当当网图书信息实例 --以警察局办案为类比 ** 使用Scrapy进行信息爬取的过程看起来十分的复杂,但是他的操作方式与警局办案十分的相似,那么接下来我们就以故事的形式开始Scr ...
- python爬虫爬取知网
python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...
最新文章
- 如何找到Kafka集群的吞吐量极限?\n
- latex 特殊符号
- ubuntu更换软件源方法和实验成功软件源地址
- extern相关问题
- KVO 和 KVC 的区别?
- 为什么推荐你使用 logback 取代 log4j
- dell linux raid 查看,Ubuntu Linux下Dell服务器使用硬Raid后查看磁盘信息方法
- 自然语言处理领域重要论文资源全索引
- 来自吉普赛人祖传的神奇读心术.它能测算出你的内心感应
- Tensorflow可视化好助手 Tensorboard (四)-Deep Learning
- MyBatis入门到精通
- 【php毕业设计】基于php+mysql的社区交流网站设计与实现(毕业论文+程序源码)——社区交流网站
- matlab 牛顿冷却定律,传热学MATLAB度分布大作业完整版.doc
- 每日一条Linux Shell命令--mv
- Ajax XHR响应
- Android 中短信数据库的简单操作
- 应用回归分析(知识点整理)(四)——SPSS处理自相关(序列相关)
- 小程序·云开发实战:SCRM社交化客户管理小程序
- IKEv2协议中的EAP-TLS认证处理流程
- js如何调用电脑的摄像头