编程语言
首页 > 编程语言> > Python手把手教你爬取当当网五星好评书籍,拿走不谢

Python手把手教你爬取当当网五星好评书籍,拿走不谢

作者:互联网

来啦,老弟

python

我们已经知道怎么使用

Requests

进行各种请求骚操作

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

正则表达式

来过滤我们想要的内容

…

那么接下来
Python学习交流Q群:906715085###


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



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

 

在这里插入图片描述

python

怎么能发现好书呢?

所以我们

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

怎么样?

python
在这里插入图片描述

ok

接下来就是

学习 python 的正确姿势

请在电脑的陪同下

边看本文边练习

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

先摸清对方的底

我们才能战无不胜

python

在这里插入图片描述

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

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

 

我们可以看到是这样的一个网页
在这里插入图片描述

python

每一页显示 20 本书

当我们点击下一页的时候

你可以发现地址变了

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

 

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

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

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

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

python

在这里插入图片描述

接着

用我们之前说的 Chrome 骚操作

来分析一下

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

以及

在这里插入图片描述

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

python

可以看到

我们通过 GET 请求
在这里插入图片描述

python

我们的请求头

在这里插入图片描述

python

这是服务器返回来的数据

在这里插入图片描述

python

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

在这里插入图片描述

python

我们要的就是前 500 本书的

排名

书名

图片地址

作者

推荐指数

五星评分次数

价格

通过源码我们可以看到

这些信息被放在了

 

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

python
python

那么我们等会就可以使用

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

来进行过滤我们要的信息

一顿分析完了之后

接下来撸代码了

在这里插入图片描述

python

主要思路

使用 page 变量来实现翻页

我们使用 requests 请求当当网

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

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

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

Python学习交流Q群:906715085###
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

没毛病

现在我们获取的是第 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()

 

完成

项目跑起来

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

python

python

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

在这里插入图片描述

python

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

在这里插入图片描述
最后

现在去看看你的500书籍都爬取下来了吗?到这里不给我点赞,我就画圈圈诅咒你长得越来越好看。都说爱学习的人最好看,说得

一定是你吧。这么好的教程不学起来真的是浪费,没学会的记得在评论区留言告诉我,我会及时帮你解决问题的。下一章见了。

标签:item,Python,items,不谢,当当网,python,00.00,我们,500
来源: https://www.cnblogs.com/123456feng/p/16170013.html