爬取豆瓣图书排行

爬取豆瓣图书排行

爬虫新手,边学边用,尝试将豆瓣图书排行爬取下来,使用requests库来获取网页,用xpath选择器筛选需要的信息。

(一)分析豆瓣图书排行URL

先来分析URL,看到这里有我们选的豆瓣图书标签:小说。还有两个参数分别是start和type。简单分析可以得知,start是当前页面第一本书的排行,type是页面的排序方式。其中type参数,T代表页面为综合排序,R代表页面按初版日期排序,S代表页面按评价排序。
在这里插入图片描述

(二)分析页面中需要的数据

打开chrome的开发者栏目,找到我们需要的信息,发现每一本书的信息都包含在

  • 里面,其中文字信息都在
    里面。
    在这里插入图片描述
  • (三)编写代码

    根据刚刚的分析,编写代码,并将信息保存到MongoDB里。

    import requests
    from lxml import etree 
    import pymongo
    
    def get_one_page(url):
    	headers={
    		'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'		
    	}
    	response=requests.get(url,headers=headers)
    	if response.status_code==200:
    		return response.text
    	return None
    
    def get_url(i):
    	base_url="https://book.douban.com/tag/小说?start="		#可将小说修改为其他关键词如:文学、诗歌等
    	url=base_url+str(i*20)+"&type=T"						#可将type参数修改为R(按初版日期排序)、S(按照评价排序),默认T为综合排序
    	return url
    
    def get_book(text,BookTable):
    	html=etree.HTML(text,etree.HTMLParser())
    	name=html.xpath('//*[@class="subject-item"]/div[2]/h2/a/text()')
    	new_name=[x.strip() for x in name if x.strip() !='']
    
    	info=html.xpath('//*[@class="pub"]/text()')
    	new_info=[x.strip() for x in info if x.strip() !='']
    	for i in range(20):
    		book={}
    		book_info=new_info[i].split('/')
    		book['name']=new_name[i]
    		print(book['name'])
    		book['author']=book_info[0]
    		book['public']=book_info[-3]
    		book['date']=book_info[-2]
    		book['price']=book_info[-1]
    		BookTable.insert_one(book)
    
    def main():
    	conntion=pymongo.MongoClient()
    	BookDB=conntion.BookDB
    	BookTable=BookDB.books
    	for i in range(5):
    		url=get_url(i)
    		print(url)
    		text=get_one_page(url)
    		get_book(text,BookTable)
    
    main()
    

    (四)结果

    在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值