Requests爬虫实践:豆瓣读书Top250数据

本文介绍了一个Python爬虫项目,旨在从豆瓣读书Top250页面抓取书籍名称和链接。通过定制请求头和利用requests库,实现了翻页功能并使用BeautifulSoup解析HTML,最终成功提取所有书籍信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Requests爬虫实践:豆瓣读书Top250数据

本次的实践项目是爬取豆瓣读书Top250的书籍名称和网页地址
参考书籍:《Python网络爬虫从入门到实践》
书中爬的是电影数据,自己想爬个书籍数据看看,差别也不是很大了
首先找到了豆瓣读书Top250的网页地址:https://book.douban.com/top250
然后需要为其定制请求头Headers,如果请求头没有指定或者和实际网页不一致,就无法返回正确的结果。

定制请求头

使用Chrome浏览器的“检查”命令查看网页请求头,如下图所示
豆瓣读书Top250网站
提取请求头代码如下:

headers = {
	'user-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
	'Host': 'book.douban.com'
}

第一页只有25项内容,因此需要获取10页的书籍,点击第二页时,网页地址变成了:https://book.douban.com/top250?start=25
第三页的地址为:
https://book.douban.com/top250?start=50
因此需要设置相应的start参数来获取

提取内容

可以将提取操作封装到函数中,代码如下:

def get_TopBooks():
	headers = {
	'user-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
	'Host': 'book.douban.com'
	}
	for i in range(0,10):
		link = 'https://book.douban.com/top250?start='+str(i*25)
	r = requests.get(link,headers = headers,timeout = 10)
	print(str(i+1),"页响应状态码:",r.status_code)
	print(r.text)
	
get_TopBooks()

运行结果显示为网页的源代码,使用BeautifulSoup解析内容提取书籍名称

内容解析

创建一个book_list列表,存取书籍名称,将上述代码修改如下:

def get_TopBooks():
	headers = {
	'user-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
	'Host': 'book.douban.com'
	}
	book_list = []
	
	for i in range(0,10):
		link = 'https://book.douban.com/top250?start='+str(i*25)
	r = requests.get(link,headers = headers,timeout = 10)
	print(str(i+1),"页响应状态码:",r.status_code)
	
	soup = BeautifulSoup(r.text,"html.parser")
	div_list = soup.find_all('div',class_='pl2')
    for each in div_list:
        book = each.a.get("title")
        book_list.append(book)
	return book_list

books = get_TopBooks()
print(books)

由于书籍标题的标签长这样:
HTML书籍标题源码
所以通过下面的这段代码来获取到书籍的标题:

div_list = soup.find_all('div',class_='pl2')
    for each in div_list:
        book = each.a.get("title")
        book_list.append(book)

得到的结果如下:
运行结果可以把最终得到的结果保存成文件便于下次的查看,由于是实现一个demo,就先让它控制台输出吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值