Python爬虫,爬取500本五星好评书

来啦,老弟

我们已经知道怎么使用

Requests]

进行各种请求骚操作

也知道了对服务器返回的数据如何使用

正则表达式

来过滤我们想要的内容

那么接下来

我们就使用 requests 和 re 来写一个爬虫

作为一个爱看书的你(说的跟真的似的)

Python爬虫,爬取500本五星好评书_第1张图片

怎么能发现好书呢?

所以我们

爬取当当网的前 **500 **本好五星评书籍

怎么样?

ok

接下来就是

学习 python 的正确姿势

请在电脑的陪同下

边看本文边练习

首先我们要对我们的目标网站进行分析

先摸清对方的底

我们才能战无不胜

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地Python爬虫,爬取500本五星好评书_第2张图片

打开这个书籍排行榜的地址

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

我们可以看到是这样的一个网页

Python爬虫,爬取500本五星好评书_第3张图片

每一页显示 20 本书

当我们点击下一页的时候

你可以发现地址变了

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

也就是我们翻到第几页的时候

链接地址的最后一个参数会跟着变

那么我们等会在 python 中可以用一个变量

来实现获取不同页数的内容

Python爬虫,爬取500本五星好评书_第4张图片

接着

用我们之前说的 Chrome 骚操作

来分析一下

我们要的内容是怎么请求的

以及

返回给我们的源代码是什么样的

可以看到

我们通过 GET 请求

Python爬虫,爬取500本五星好评书_第5张图片

我们的请求头

Python爬虫,爬取500本五星好评书_第6张图片

这是服务器返回来的数据

Python爬虫,爬取500本五星好评书_第7张图片

接着我们再来分析一下我们要抓取的关键信息

Python爬虫,爬取500本五星好评书_第8张图片

我们要的就是前 500 本书的

排名

书名

图片地址

作者

推荐指数

五星评分次数

价格

通过源码我们可以看到

这些信息被放在了

  • 标签中
  • Python爬虫,爬取500本五星好评书_第9张图片

    Python爬虫,爬取500本五星好评书_第10张图片

    那么我们等会就可以使用

    来进行过滤我们要的信息

    一顿分析完了之后

    接下来撸代码了

    Python爬虫,爬取500本五星好评书_第11张图片

    主要思路

    使用 page 变量来实现翻页

    我们使用 requests 请求当当网

    然后将返回的 HTML 进行正则解析

    由于我们暂时还没学到数据库

    所以解析完之后就把内容存到文件中

    def main(page):
       url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-' + str(page)
        html = request_dandan(url)
       items = parse_result(html) # 解析过滤我们想要的信息
    
       for item in items:
           write_item_to_file(item)
    
    

    请求当当网

    当我们请求成功之后

    拿到源代码

    
    在学习过程中有什么不懂得可以加我的
    python学习交流扣扣qun,784758214
    群里有不错的学习视频教程、开发工具与电子书籍。
    与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
    def request_dandan(url):
       try:
           response = requests.get(url)
           if response.status_code == 200:
               return response.text
       except requests.RequestException:
           return None
    
    

    拿到源代码了

    就要对其解析

    使用正则表达式获取我们想要的关键信息

    获取到了之后我们封装一下数据

    def parse_result(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: yield { 'range': item[0], 'iamge': item[1], 'title': item[2], 'recommend': item[3], 'author': item[4], 'times': item[5], 'price': item[6] }

    打印一下看看结果

    for item in items:
           print(item)
    
    

    可以看到这样的数据

    Python爬虫,爬取500本五星好评书_第12张图片

    没毛病

    现在我们获取的是第 1 页的数据

    如何自动获取 25 页 500 条数据呢

    来个 for 循环呗

    if __name__ == "__main__":
       for i in range(1,26):
           main(i)
    
    

    获取完 500 本书的数据之后

    存到 book.txt 文件

    
    在学习过程中有什么不懂得可以加我的
    python学习交流扣扣qun,784758214
    群里有不错的学习视频教程、开发工具与电子书籍。
    与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
    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()
    
    

    完成

    项目跑起来

    打开我们存储的 book.txt 看看

    Python爬虫,爬取500本五星好评书_第13张图片

    前 500 本书的数据就被我们拿到啦

    Python爬虫,爬取500本五星好评书_第14张图片

    你可能感兴趣的:(Python爬虫,爬取500本五星好评书)