前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3 爬虫学习:爬取豆瓣读书Top250(四)

python3 爬虫学习:爬取豆瓣读书Top250(四)

作者头像
python鱼霸霸
发布2020-05-08 17:00:57
7110
发布2020-05-08 17:00:57
举报
文章被收录于专栏:python入门学习教程

在python3 爬虫学习:爬取豆瓣读书Top250(三)中,我们已经成功获取了数据,但是我们只拿到了一页的数据,今天,咱们继续补充程序。

url分析

咱们先来分析一下,豆瓣读书top250的url有没有什么规律,以便我们进行代码的编辑呢?

代码语言:javascript
复制
第 1 页:https://book.douban.com/top250
第 2 页:https://book.douban.com/top250?start=25
第 3 页:https://book.douban.com/top250?start=50
...
第 10 页:https://book.douban.com/top250?start=225

从上面的url可以看到,每一次,url变化的部分都是top250之后,新加了一个?start=[num],这里的num每一页增加了25,代表是每一页的数据量是25,我们发现了一个url和页数的规律性:(页数 - 1)*25 = num

于是url可以写成这样:

代码语言:javascript
复制
url = 'https://book.douban.com/top250?start={}'
for i in range(10):
  num = i * 25
  urls = url.format(num)
  print(urls)

#输出:
https://book.douban.com/top250?start=0
https://book.douban.com/top250?start=25
https://book.douban.com/top250?start=50
https://book.douban.com/top250?start=75
https://book.douban.com/top250?start=100
https://book.douban.com/top250?start=125
https://book.douban.com/top250?start=150
https://book.douban.com/top250?start=175
https://book.douban.com/top250?start=200
https://book.douban.com/top250?start=225

很好,现在我们已经拿到了所有目标页的url地址,下一步,就是把程序做一下补充啦:

代码语言:javascript
复制
# 导入requests、BeautifulSoup、time库
import requests
from bs4 import BeautifulSoup
import time

# 类属性初始值的设置(初始化方法)
def book_spider(url):

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36'
    }
    # 以get方法获取网页数据并将response对象存入res
    res = requests.get(url, headers = headers)

    # 建立BeautifulSoup对象
    bs = BeautifulSoup(res.text, 'html.parser')

    # 提取所有class = 'pl2'的div标签里面的a标签
    items = bs.select('div.pl2 a')

    # 提取所有class = 'pl'的p标签
    authors = bs.select('p.pl')

    # 提取所有class = 'inq'的span标签
    abstract = bs.select('span.inq')

    # 使用zip函数,遍历多个列表
    for i, j, k in zip(items, authors, abstract):
        # 字符串格式化,使用\n换行
        print('书名:{}\n链接:{}\n{}\n推荐语:{}'.format(i['title'], i['href'], j.text, k.text))

        # 打印一行分隔符,让输出结果更美观
        print('--------------------------------')

url = 'https://book.douban.com/top250?start={}'

urls = [url.format(num * 25) for num in range(10)]

for url in urls:
    book_spider(url)          #把重新生成的url传入函数中,并调用
    time.sleep(2)             #每爬一个链接,休息2秒钟

输出结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • url分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档