python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

来啦,老弟

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

我们已经知道怎么使用

 

Requests

 

进行各种请求骚操作

 

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

 

正则表达式

 

来过滤我们想要的内容

 

...

 

那么接下来

 

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

 

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

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

怎么能发现好书呢?

 

所以我们

 

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

 

怎么样?

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

ok

 

接下来就是

 

学习 python 的正确姿势

 

请在电脑的陪同下

 

边看本文边练习

 

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

 

先摸清对方的底

 

我们才能战无不胜

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

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

 

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

 

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

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

每一页显示 20 本书

 

当我们点击下一页的时候

 

你可以发现地址变了

 

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

 

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

 

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

 

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

 

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

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

接着

 

用我们之前说的 Chrome 骚操作

 

来分析一下

 

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

 

以及

 

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

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

可以看到

 

我们通过 GET 请求

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

我们的请求头

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

这是服务器返回来的数据

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

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

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

 

我们要的就是前 500 本书的

 

排名

书名

图片地址

作者

推荐指数

五星评分次数

价格

 

通过源码我们可以看到

 

这些信息被放在了 <li> 标签中

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

那么我们等会就可以使用

 

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

 

来进行过滤我们要的信息

 

一顿分析完了之后

 

接下来撸代码了

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 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('<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><spansclass="price_n">&yen;(.*?)</span>.*?</li>',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爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

没毛病

 

现在我们获取的是第 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) + ' ')
       f.close()

 

 

完成

 

项目跑起来

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

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

 

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

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

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

 

本篇完

 

完整代码小帅b已经放到公众号后台啦

 

需要的朋友

 

在公众号发送

 

500

 

即可获取

 

ok

 

咱们下回再见

 

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

扫一扫

学习 Python 没烦恼

 

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

 

 

近期文章

 

python爬虫03 | 那个叫做Urllib的库让我们的python假装是浏览器

 

python爬虫04 | 长江后浪推前浪,Requests库把urllib库拍在沙滩上

 

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

 

 

 

 

 

 

 

支持小帅b的就顺手

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍点个好看吧