1、目的
将豆瓣读书top250排名保存到本地excel,包括书名,作者,评分,评论数,简评,网址。用到了requests,res,BeautifulSoup,csv库。
2、分析网址
打开豆瓣读书网址:https://book.douban.com/top250
第一页:https://book.douban.com/top250
第二页:https://book.douban.com/top250?start=25
第三页:https://book.douban.com/top250?start=50
…
第十页:https://book.douban.com/top250?start=225
把第一页的网址改为:https://book.douban.com/top250?start=0
找到规律,通过修改最后的数字改变网址,先定义一个函数获取所有网址,并存入列表。
def get_all_url(): #定义获取所有网址的函数
urls = []
for i in range(0, 250, 25):
url_1 = 'https://book.douban.com/top250?start1={}'.format(i)
urls.append(url_1)
return urls
返回urls列表
3、分析网站内容
打开任一网址,右击书名–检查
打开后显示:
通过观察其他书名,可以通过div class = pl2定位。
先导入需要的库文件,使用requests获取网页内容,使用beautifulsoup解析网页。header要写,模拟为浏览器,不然可能返回空值。
import requests #导入requests库,用于获取网页数据
import re #导入re库,用于正则表达式筛选数据
from bs4 import BeautifulSoup #导入库,用于解析网页
import csv #导入库,用于创建csv文件并写入数据
url_2 = 'https://book.douban.com/top250?start=50'
header = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like\
Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0\
.3 Mobile/15E148 Safari/604.1'}
res = requests.get(url_2, headers=header)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'lxml')
data_name = soup.find_all('div', class_='pl2')[1]
names = data_name.a.get('title')
href = data_name.a.get('href')
打印测试结果,返回书名和网址:
相同的方法,分别定位到作者,评分,
data_author = soup.find_all('p', class_='pl')[1]
authors = data_author.get_text().split('/')[0]
data_score = soup.find_all('span', class_='rating_nums')[1]
scores = data_score.get_text()
data_msg = soup.find_all('span', class_='pl')[1].get_text()
msgs = re.findall('\d+', data_msg)[0]
打印结果测试: