Python爬虫之起点中文网完本小说 | 您所在的位置:网站首页 › 起点完本小说 › Python爬虫之起点中文网完本小说 |
任务
爬取起点中文网前5页(页数可改)完本小说将爬取到的小说名字、作者、链接以及相关简介保存到一个excel表格中
分析
通过检查网页的源码可知,浏览器发起的是get请求,返回的数据类型是text/html。因此可以调用requests模块中的get() 函数得到页面源码数据 headers = { 'User-Agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 86.0.4240.198Safari / 537.36' } param = { 'page': page_num } url = 'https://www.qidian.com/finish?action=hidden&orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=2&' response = requests.get(url=url, params=param, headers=headers) page_data = response.text(由于刚刚接触爬虫,这里遇到了一个问题: 当得到page_data数据后,对其进行打印显示,发现页面源码缺少本次任务的关键内容,即小说的所有数据都不在页面源码中。但是当将其保存为一个html文件,再打开,并创建一个BeautifulSoup对象后,再对其进行打印,小说的有关数据又会显示出来,这一点不是太明白,希望看到此文的朋友可以讲解一下原理。) file = open('qidian.html', 'r', encoding='utf-8') soup = BeautifulSoup(file, 'lxml')得到BeautifulSoup对象soup后,就可以用正则表达式对要爬取的内容进行提取。每得到一个数据,就将其保存在一个列表中,最后对excel表格进行操作,就可将数据进行永久化存储。 完整代码 # -*- coding = utf-8 -*- # @Time : 2020/12/27 11:17 # @author: 农夫三犭 # @File : main.py # @Software:PyCharm import requests import re from bs4 import BeautifulSoup import xlwt # 小说链接 findLink = re.compile(r'(.*?)|') # 小说简介 findIntroduce = re.compile(r'(.*?) ', re.S) if __name__ == '__main__': savepath = "起点小说完结.xls" datalist = [] headers = { 'User-Agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 86.0.4240.198Safari / 537.36' } url = 'https://www.qidian.com/finish?action=hidden&orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=2&' for page_num in range(1, 6): # 前5页内容 page_num = str(page_num) param = { 'page': page_num } response = requests.get(url=url, params=param, headers=headers) page_data = response.text with open('./qidian.html', 'w', encoding='utf-8') as fp: fp.write(page_data) file = open('qidian.html', 'r', encoding='utf-8') soup = BeautifulSoup(file, 'lxml') for item in soup.find_all('div', class_='book-mid-info'): data = [] item = str(item) # 必须先转换为字符串 # 小说名字 name = re.findall(findName, item)[0] data.append(name) # 小说作者 author = re.findall(findAuthor, item)[0] data.append(author) # 小说链接 link = re.findall(findLink, item)[0] link = 'https' + link data.append(link) # 小说简介 introduce = re.findall(findIntroduce, item) introduce = [x.strip() for x in introduce if x.strip() != ''][0] # 去除列表中的空格和换行 data.append(introduce) datalist.append(data) book = xlwt.Workbook(encoding="utf-8") # 创建workbook对象 sheet = book.add_sheet('起点小说完本', cell_overwrite_ok=True) # 创建工作表 column = ("小说名字", "小说作者", "小说链接", "小说简介") # 元组 for i in range(0, 4): sheet.write(0, i, column[i]) # 列名 for i in range(0, len(datalist)): print(f"第{i + 1}条写入成功") datas = datalist[i] for j in range(0, 4): sheet.write(i + 1, j, datas[j]) # 数据 book.save(savepath)(刚开始学爬虫,不足之处还请大家多多指教) |
CopyRight 2018-2019 实验室设备网 版权所有 |