python爬虫教程之爬取当当网 Top 500 本五星好评书籍

liftword1个月前 (03-24)技术文章6

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

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

怎么能发现好书呢?

所以我们

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

怎么样?

ok

接下来就是

学习 python 的正确姿势

请在电脑的陪同下

边看本文边练习

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

先摸清对方的底

我们才能战无不胜


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

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

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

每一页显示 20 本书

当我们点击下一页的时候

你可以发现地址变了

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

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

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

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

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

接着

用我们之前说的 Chrome 骚操作

来分析一下

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

以及

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

可以看到

我们通过 GET 请求

我们的请求头

这是服务器返回来的数据

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

我们要的就是前 500 本书的:

排名

书名

图片地址

作者

推荐指数

五星评分次数

价格

通过源码我们可以看到

这些信息被放在了

  • 标签中

    那么我们等会就可以使用

    年轻人,不会正则表达式你睡得着觉?有点出息没有?

    来进行过滤我们要的信息

    一顿分析完了之后

    接下来撸代码了


    主要思路

    使用 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)

    请求当当网

    当我们请求成功之后

    拿到源代码

    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">.*?(.*?)
    .*?

    yen(.*?).*?',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)

    可以看到这样的数据

    没毛病

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

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

    来个 for 循环呗

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

    获取完 500 本书的数据之后

    存到 book.txt 文件

    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 看看

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

    本篇完。


    完整代码:私信“当当”自动获取。

    需要的朋友,重要的事情说三遍!

    私信“当当”这两个字,即可自动获取!

    私信“当当”这两个字,即可自动获取!

    私信“当当”这两个字,即可自动获取!

    ok

    咱们下回再见

    相关文章

    Python爬取小说技术指南

    在 Python 中爬取小说需要遵循法律法规和网站的服务条款,请确保你有权获取目标内容。以下是使用 Python 爬取小说的通用技术流程安装依赖库pip install requests beauti...

    Java原生代码实现爬虫(爬取小说)

    Java也能做爬虫。现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择,Java成熟的爬虫框架很多,下面给大家展示一个使用Java基础语言编写的爬取小说的案例:实现功能...

    超有趣!用 Python 爬取抖音热门视频数据,探索爆款密码

    在当今的社交媒体时代,抖音无疑是最热门的平台之一。每天都有海量的视频被上传,其中一些视频迅速走红,成为爆款。你是否好奇这些热门视频背后有什么规律?今天,我们就用 Python 来爬取抖音热门视频数据,...

    python利用Selenium爬取电影天堂实现电影自由

    前几期我们实现了小说,音乐自由,当然不能少了影视自由啦,这期我们就来看看如何利用python实现电影自由。首先老办法我们打开电影天堂的网站,右击检查查看下网站的源码经过分析后暗暗窃喜,跟之前一个套路,...

    Python“三步”即可爬取,毋庸置疑

    声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块import reimport requests#第二步获取你想爬取的网页地址,发送请求,获取网页内...