Advertisement

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

阅读量:

爬取当当网Top500本五星好评书籍

  • ==实战前提:==

  • 准备工作

    • 撸代码
  • 成果展示

实战前提:

复制代码
    掌握requests库的使用
    熟悉re库,正则表达式的简单使用
    可参考我的另外两篇博客进行学习
    
    
      
      
      
    
    代码解读

准备工作

通过访问当当网的书籍排行榜专区并输入关键词"五星"即可查看相关商品

打开之后可以看到:

在这里插入图片描述
在这里插入图片描述

可以发现:

复制代码
    每一页显示二十本书
    
    
      
    
    代码解读

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

复制代码
    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('<li>.*?list_num.*?(\d+).</div>.*?<img src="(.*?)".*?class="name".*?title="(.*?)">.*?class="star">.*?class="tuijian">(.*?)</span>.*?class="publisher_info">.*?target="_blank">(.*?)</a>.*?class="biaosheng">.*?<span>(.*?)</span></div>.*?<p><span\sclass="price_n">&yen;(.*?)</span>.*?</li>',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)
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    代码解读

成果展示

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~