走近数据科学案例(1):使用网络爬虫自动抓取图书信息
优采云 发布时间: 2022-05-13 04:45走近数据科学案例(1):使用网络爬虫自动抓取图书信息
网络爬虫是一种从互联网上进行开放数据采集的重要手段。本案例通过使用Python的相关模块,开发一个简单的爬虫。实现从某图书网站自动下载感兴趣的图书信息的功能。主要实现的功能包括单页面图书信息下载,图书信息抽取,多页面图书信息下载等。本案例适合大数据初学者了解并动手实现自己的网络爬虫。
1、任务描述和数据来源
从当当网搜索页面,按照关键词搜索,使用Python编写爬虫,自动爬取搜索结果中图书的书名、出版社、价格、作者和图书简介等信息。
当当搜索页面:
2、单页面图书信息下载2.1 网页下载
Python中的 requests 库能够自动帮助我们构造向服务器请求资源的request对象,返回服务器资源的response对象。如果仅仅需要返回HTML页面内容,直接调用response的text属性即可。在下面的代码中,我们首先导入requests库,定义当当网的搜索页面的网址,设置搜索关键词为"机器学习"。然后使用requests.get方法获取网页内容。最后将网页的前1000个字符打印显示。
import requests #1. 导入requests 库<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />test_url = 'http://search.dangdang.com/?key='+ '机器学习' #2. 设置网页的URL地址<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />content_page = requests.get(test_url).text #3. 执行页面请求,返回页面内容<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />print(content_page[:1000]) #4.将页面的前1000个字符打印显示出来<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
2.2 图书内容解析
下面开始做页面的解析,分析源码.这里我使用Chrome浏览器直接打开网址 机器学习 。然后选中任意一本图书信息,鼠标右键点击“检查”按钮。不难发现搜索结果中的每一个图书的信息在页面中为标签,如下图所示:
点开第一个标签,发现下面还有几个
标签,且class分别为"name"、"detail"、"price"等,这些标签下分别存储了商品的书名、详情、价格等信息。
我们以书名信息的提取为例进行具体说明。点击 li 标签下的 class属性为 name 的 p 标签,我们发现书名信息保存在一个name属性取值为"itemlist-title"的 a 标签的title属性中,如下图所示:
我们可以使用xpath直接描述上述定位信息为 //li/p/a[@name="itemlist-title"]/@title 。下面我们用 lxml 模块来提取页面中的书名信息。xpath的使用请参考 。
page = etree.HTML(content_page) #将页面字符串解析成树结构<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />book_name = page.xpath('//li/p/a[@name="itemlist-title"]/@title') #用xpath提取出书名信息。<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />book_name[:10] #打印提取出的前10个书名信息 <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
同理,我们可以提取图书的出版信息(作者、出版社、出版时间等),当前价格、星级、评论数等更多的信息。这些信息对应的xpath路径如下表所示。
信息项xpath路径
书名
//li/p/a[@name="itemlist-title"]/@title
出版信息
//li/p[@class="search_book_author"]
当前价格
//li/p[@class="price"]/span[@class="search_now_price"]/text()
星级
//li/p[@class="search_star_line"]/span[@class="search_star_black"]/span/@style