爬取豆瓣图书排行
爬虫新手,边学边用,尝试将豆瓣图书排行爬取下来,使用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()
(四)结果