爬虫百战(一):爬取当当网Top500本五星好评书籍

您所在的位置:网站首页 大学计算机书籍排行榜 爬虫百战(一):爬取当当网Top500本五星好评书籍

爬虫百战(一):爬取当当网Top500本五星好评书籍

2024-07-09 10:52| 来源: 网络整理| 查看: 265

爬取当当网Top500本五星好评书籍 ==实战前提:==准备工作撸代码 成果展示

实战前提: 掌握requests库的使用 熟悉re库,正则表达式的简单使用 可参考我的另外两篇博客进行学习 准备工作

1.打开当当网书籍排行榜的网址: 五星图书排行榜

打开之后可以看到: 在这里插入图片描述 在这里插入图片描述 可以发现:

每一页显示二十本书

点击下一页发现地址发生改变: 第二页

http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2

我们可以在python中设置一个变量里来实现获取不同页数的内容

2.分析网页的请求和响应操作 鼠标右键点击检查或按F12,进入以下页面: 在这里插入图片描述 我们可以看到我们的请求头,还可以看到服务器返回来的数据: 在这里插入图片描述 3.分析我们将要抓取的关键信息 在这里插入图片描述 我们要的就是前500本书的

排名 书名 图片地址 作者 推荐指数 五星评分次数 价格

通过源码我们可以看到这些信息都被放在

标签中: 在这里插入图片描述 在这里插入图片描述

撸代码

思路:

1.使用page进行翻页操作 2.使用requests请求当当网 3.将返回的HTML源码进行解析 4.将解析完的数据保存到csv格式的文件中,方便进行后续数据分析

源码:

#-*- coding = utf-8 -*- #@Time : ****/*/* **:** #@Author : shy-2 #@File : 获取当当网五星图书排行榜Top500.py #@Software : PyCharm import requests import re import json #请求当当网 获取源代码 def request_dangdang(url): try: response = requests.get(url) if response.status_code == 200: return response.text except requests.RequestException: return None #解析源代碼 def parse_response(html): pattern = re.compile('.*?list_num.*?(\d+)..*?.*?class="star">.*?class="tuijian">(.*?).*?class="publisher_info">.*?target="_blank">(.*?).*?class="biaosheng">.*?(.*?).*?

¥(.*?).*?',re.S) items = re.findall(pattern,html) for item in items: #打印一下 查看結果 print(item) yield { 'range': item[0], 'image': item[1], 'title': item[2], 'recommand': item[3], 'author': item[4], 'times': item[5], 'price': item[6] } #写入文件 def write_item_to_file(item): print("开始写入数据:" + str(item)) with open('book.txt', 'a', encoding='UTF-8') as f: f.write(json.dumps(item, ensure_ascii=False) + '\n') f.close() #主函数 def main(page): url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-'+str(page) html = request_dangdang(url) items = parse_response(html) for item in items: write_item_to_file(item) #实现翻页 if __name__=="__main__": for i in range(1,26): main(i) 成果展示

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3