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

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

原创
作者头像
python鱼霸霸
修改2020-05-06 18:10:58
1.1K0
修改2020-05-06 18:10:58
举报

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

##### url分析

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

代码语言:txt
复制
第 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可以写成这样:

代码语言:txt
复制
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地址,下一步,就是把程序做一下补充啦:

代码语言:txt
复制
# 导入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 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档