600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Python爬虫之起点中文网完本小说

Python爬虫之起点中文网完本小说

时间:2019-08-04 05:41:35

相关推荐

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 = '/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 : /12/27 11:17# @author: 农夫三犭# @File : main.py# @Software:PyCharmimport requestsimport refrom bs4 import BeautifulSoupimport xlwt# 小说链接findLink = pile(r'<a data-bid=.*? data-eid=.*? href="(.*?)"', re.S) # 选取的内容要用括号括起来# 小说名字findName = pile(r'<a data-bid=.*? data-eid=.*? href=.*? target=.*?>(.*)</a></h4>')# 小说作者findAuthor = pile(r'a class="name" data-eid=.*? href=.*? target="_blank">(.*?)</a><em>|</em>')# 小说简介findIntroduce = pile(r'<p class="intro">(.*?)</p>', 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 = '/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.textwith 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' + linkdata.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)

(刚开始学爬虫,不足之处还请大家多多指教)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。