在python3 爬虫学习:爬取豆瓣读书Top250(三)中,我们已经成功获取了数据,但是我们只拿到了一页的数据,今天,咱们继续补充程序。
咱们先来分析一下,豆瓣读书top250的url有没有什么规律,以便我们进行代码的编辑呢?
第 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可以写成这样:
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地址,下一步,就是把程序做一下补充啦:
# 导入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秒钟
输出结果