系列文章目录

python爬虫实践–晋江小说书籍分析
python爬虫实践-腾讯视频弹幕分析
python爬虫实践-B站弹幕分析


文章目录

  • 系列文章目录
  • 目录
  • 爬取晋江排行榜
  • 爬取文案
  • 其它想法
  • 结语

## 前言 寒假在家看小说,看着看着想自己写,然后申了几次没过,打算把榜单文章拿来好好分析一下,做个高大上的词云看看方向什么的。 但我不会爬虫,只听说过,就上网搜别人的代码,但是别人的代码不满足我的需求,我看不懂也改不了。

凭着一口我也是程序人的志气(主要恰好学了python),自己去搜了怎么写爬虫,把视频看了一遍,过了下大概思路,然后看第二遍,注意一些细节,跟着一步一步地做自己的(主要是用他的思路和跟着写一点语句),最后就把晋江上我需要的数据搞出来了。(默默夸一句,beautifulSoup真真真好用)

目录

爬取晋江排行榜

思路,看懂学习视频,自己用那样的思路去解自己想要提取信息的网站。
我也遇到很多问题,查了很多资料,看得头都要秃了,但最后做出来的成就感真的很大。
爬虫的学习视频链接如下:
https://www.bilibili.com/video/BV12E411A7ZQ
老师讲得很清晰很有条理!!(声音很好听,就是没有看到脸。)
代码

# -*- codeding = utf-8 -*-
# @Time : 2021/1/22 14:12
# @Author : ljr
# @File : lx1.py
# @Software : PyCharm#爬取晋江文学城排行榜前一百的书籍名字,链接,字数import urllib
import urllib.request
from bs4 import BeautifulSoup
import re
import xlwt
import sqlite3def main():baseurl = "http://www.jjwxc.net/bookbase.php?fbsj12=12&ycx1=1&xx1=1&xx2=2&page="# 1.爬取网页datalist = getData(baseurl)print(len(datalist))savepath = ".\\晋江小说.xls"# dbpath = "book.db"# 3.保存数据saveData(savepath,datalist)# saveDataDb(datalist, dbpath)#先准备的提取信息内容的正则表达式
findName = re.compile(r'">(.*?)</a>',re.U)
findLink = re.compile(r'<a href="(.*?)"')
findSize = re.compile(r'<td align="right">(\d+)</td>')# 1.爬取网页(完成)
def getData(baseurl):datalist = []for i in range(1,4):    #搜索结果的页数url = baseurl + str(i)html = askURL(url)# 2.逐一解析soup = BeautifulSoup(html, "html.parser")i = 0for item in soup.findAll('tr'):data = [] # 保存一本书的所有信息item = str(item)# 提取文名Name = re.findall(findName, item)# 提取文章链接Link = re.findall(findLink, item)# 提取字数Size = re.findall(findSize, item)if i:data.append(Name[1])Link[1]='http://www.jjwxc.net/' + Link[1]data.append(Link[1])data.append(Size[0])datalist.append(data)i = 1return datalist# 2.得到指定一个URL的网页的内容
def askURL(url):head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75"}request = urllib.request.Request(url,headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode('GBK')# html = response.read()# buff = BytesIO(html)# f = gzip.GzipFile(fileobj=buff)# html = f.read().decode("GBK")#这是之前解不开编码时尝试的其它方法except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code)if hasattr(e,"reason"):print(e.reason)return html# 3.保存数据
# 保存到文件中
def saveData(savepath,datalist):workbook = xlwt.Workbook(encoding='utf-8',style_compression=0)worksheet = workbook.add_sheet('晋江1', cell_overwrite_ok=True)col = ("书名","链接","字数")for i in range(0,3):worksheet.write(0,i,col[i])for i in range(0,len(datalist)):data = datalist[i]for j in range(0,len(data)):worksheet.write(i+1,j,data[j])workbook.save(savepath)'''
# 保存到数据库中
def saveDataDb(datalist, dbpath):init_db(dbpath)conn = sqlite3.connect(dbpath)cur = conn.cursor()for data in datalist:for index in range(len(data)):if index != len(data)-1:data[index] = '"' + data[index] + '"'sql = "insert into book300(name,link,size) values(%s)"%",".join(data)print(sql)cur.execute(sql)conn.commit()cur.close()conn.close()# 创建数据库
def init_db(dbpath):conn = sqlite3.connect(dbpath)  # 打开或创建一个数据库c = conn.cursor()sql = """create table book300(name text primary key not null,link text,size char(50));"""c.execute(sql)conn.commit()conn.close()
'''if __name__ == '__main__':# 调用函数main()

结果

然后就是做词云分析,统计什么的,我就只想看个词云分析,所以只写了这部分的内容。
代码

# -*- codeding = utf-8 -*-
# @Time : 2021/1/24 19:30
# @Author : ljr
# @File : wcloud.py
# @Software : PyCharmimport sqlite3
import jieba
from matplotlib import pyplot as plt # 绘图,数据可视化
from wordcloud import WordCloud #词云
from PIL import Image   # 图片处理
import numpy as np  #矩阵运算con = sqlite3.connect("book.db")
cur = con.cursor()
sql = '''select name from book300'''
data = cur.execute(sql)
text = ""
for item in data:text = text + item[0]
# print(text)
cur.close()
con.close()#拆词
cut = jieba.cut(text)
string = ' '.join(cut)#生成遮罩
img = Image.open(r'.\flask\static\images\mask.png')
img_array = np.array(img) #将图片转化为数组
wc = WordCloud(background_color='white',mask = img_array,font_path="SIMYOU"
)
wc.generate_from_text(string)#绘制图片
fig = plt.figure(1)
plt.imshow(wc)
plt.axis('off') # 是否显示坐标轴
# plt.show() # 显示生成的词云图片
#输出词云图片到文件
plt.savefig(r'.\flask\static\images\word.png')

效果

这个是根据标题中的词语出现频率来做成的,但是大概已经能够确定什么是热标签,写什么题材能够迎合市场,就是穿书,反派,白月光。(我就是确定了这几个哈哈哈,虽然整个寒假什么都没搞出来QAQ。)

爬取文案

基本思路就是先随便找一本书点进链接,然后在这个链接中把自己想要的信息提取出来处理一下。
最后再添加变量,让它遍历你第一步提取出来的文章链接,通过这个链接的变化就可以把每一本书的信息自动提取出来了。(感觉很多地方的模式都是重复的,只是变量上的区别,所以在代码中处理一下变量就可以实现大量系统的重复工作)
目录

代码

# -*- coding = utf-8 -*-
# @Time : 2021/1/25 18:17
# @Author : ljr
# @File : cw.py
# @Software : PyCharm
# 提取文案,存放到excel中,看文案可以快速知道文章大概的情节和人设,爽点萌点等
# 提取标签,做一个词云,掌握市场
import urllib
import urllib.request
from bs4 import BeautifulSoup
import re
import xlwt
import xlrd
from xlutils.copy import copy
import gzip
from io import BytesIOfindCopywrite = re.compile(r'<div id="novelintro" itemprop="description">(.*?)</div>', re.U)
#findLable = re.compile(r'<a style="text-decoration:none;color: red;" href="http://www.jjwxc.net/bookbase.php?bq41=41" target="_blank">(.*?)</a>')
#findSize = re.compile(r'<td align="right">(\d+)</td>')def main():savepath = "晋江小说.xls"sheetname = "文案"#1.得到需要爬取的文章页面的列表data = geturl(savepath,sheetname)#data = [['ha','o '],['http://www.jjwxc.net/onebook.php?novelid=4790493','http://www.jjwxc.net/onebook.php?novelid=4954901']]# 2.爬取网页datalist = getData(data)print(len(datalist))# 3.保存数据saveData(savepath,sheetname, datalist)print("存储完成")# saveDataDb(datalist, dbpath)
#1.打开文件得到需要爬取的列表
def geturl(savepath,sheetname):url = []name = []data = []rb = xlrd.open_workbook('晋江小说.xls', formatting_info=True)rs = rb.sheet_by_name("晋江1")for i in range(1, 100):row_data = rs.row_values(i)data.append(row_data)for i in range(len(data)):name.append(data[i][0])url.append(data[i][1])data = [name, url]return data# 爬取网页(完成)
def getData(data):datalist = []for i in range(len(data[1])):url=data[1][i]Lable = []copywrite = []print('开始爬取网页:',url)try:html = askURL(url)except (ValueError, OSError) as es:continueelse:# 2.逐一解析soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('td',class_='readtd'):item = str(item)# 提取文案copywrite.append(re.findall(findCopywrite, item))# 提取标签for item in soup.find_all('a',style = "text-decoration:none;color: red;",target = "_blank" ):Lable.append(item.get_text())datalist.append([data[0][i],copywrite[0],Lable])print(datalist)return datalist# 得到指定一个URL的网页的内容(完成)
def askURL(url):head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75"}request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)# html = response.read().decode('GBK')html = response.read()buff = BytesIO(html)f = gzip.GzipFile(fileobj=buff)html = f.read().decode("gbk")except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return htmldef saveData(savepath,sheetname, datalist):# open existing workbookrb = xlrd.open_workbook(savepath, formatting_info=True)# make a copy of itwb = copy(rb)# add sheet to workbook with existing sheetsworksheet = wb.add_sheet(sheetname)col = ("书名", "文案","标签")for i in range(0, 3):worksheet.write(0, i, col[i])i = 1for data in datalist:worksheet.write(i, 0, data[0])worksheet.write(i, 1, data[1])worksheet.write(i, 2, data[2])i = i + 1wb.save(savepath)if __name__ == '__main__':# 调用函数main()

效果:

其它想法

想统计下文章中出现的形容词、副词、常用句式什么的,看看那些大火的书有没有 什么共同的规律,人家都用了什么叙事手法,什么梗,什么事件顺序。
下面是继续用jieba拆分整本书的词:
目录:

代码:

# -*- coding = utf-8 -*-
# @Time : 2021/1/25 19:29
# @Author : ljr
# @File : article.py
# @Software : PyCharm# 用jieba统计处理文章中所有的词语,做词云或者存到excel中都可以
import jieba
import xlwt
import xlrd
from xlutils.copy import copydef main():filepath = r'《君子有九思》.txt'cstring = []counts = {}savepath = r'晋江小说.xls'sheetname = r'《君子有九思》'# 1.打开文件text = readtext(filepath)# 2.提取词语cstring = extractwords(text)# 3.统计频率counts = wordcount(cstring)# 4.存放到excel中saveData(savepath, sheetname, counts)# 读取文本数据
def readtext(filepath):fp = open(filepath, 'r', encoding='gbk', errors='ignore')text = fp.read()# print(text)fp.close()return text# 用jieba分词进行处理
def extractwords(text):jieba.load_userdict(r'word.txt')jieba.add_word('老婆粉')jieba.add_word('乔瞧')jieba.add_word('霍希')jieba.add_word('盛乔')cstring = jieba.lcut(text)# string = ' '.join(cut)# print(cstring)return cstring# 统计词频
def wordcount(cstring):counts = {}     # 通过键值对的形式存储词语及其出现的次数#s = open("baidu_stopwords.txt", encoding='utf-8', errors="ignore")baidu_stop = []for word in s:word = word.strip()baidu_stop.append(word)#for word in cstring:if len(word) == 1:    # 单个词语不计算在内continueelse:counts[word] = counts.get(word, 0) + 1    # 遍历所有词语,每出现一次其对应的值加 1items = list(counts.items())    # 将键值对转换成列表items.sort(key=lambda x: x[1], reverse=True)    # 根据词语出现的次数进行从大到小排序# 去除停用词for temp in items:if temp[0] in baidu_stop:items.remove(temp)s.close()return items   #返回一个字典# print(items)# 将item写入excel
def saveData(savepath,sheetname, datalist):# open existing workbookrb = xlrd.open_workbook(savepath, formatting_info=True)# make a copy of itwb = copy(rb)# add sheet to workbook with existing sheetsworksheet = wb.add_sheet(sheetname)col = ("词语", "次数")for i in range(0, 2):worksheet.write(0, i, col[i])i = 1for data in datalist:worksheet.write(i, 0, data[0])worksheet.write(i, 1, data[1])i = i + 1wb.save(savepath)if __name__ == "__main__":main()

但是结果,emmm(大声喊:这不是我想要的!!这个统计出来有毛用啊!!!):

我想统计真正用人类思维去理解拆分这个句子,让它是个完整的意思,这个结果明显不符合期待,于是继续搜资料,搜到了机器学习的部分。
于是想学机器学习把这个事情解决了,emmm,然后发现自己的力量太弱小,搞不定机器学习。
哎!(技术小白菜沉重地叹一口气)

结语

其实做了这么多,最后也还没有接近真正能创造价值那一步(就是写出能赚钱的小说),所以计算机/计算机语言都只是工具,要做成真正有效的事需要一环扣一环的努力。

python爬虫实践--晋江小说书籍分析相关推荐

  1. Python爬虫实践-网易云音乐

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  2. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)

    Python爬虫+数据分析+数据可视化(分析<雪中悍刀行>弹幕) 哔哔一下 爬虫部分 代码部分 效果展示 数据可视化 代码展示 效果展示 视频讲解 福利环节 哔哔一下 雪中悍刀行兄弟们都看 ...

  3. python爬虫实践报告_Python 爬虫实践:浅谈数据分析岗位

    原标题:Python 爬虫实践:浅谈数据分析岗位 转自:法纳斯特 讲道理,pyspider确实是一款优秀的爬虫框架,我们可以利用它快速方便地实现一个页面的抓取. 不过带来便捷性的同时,也有它的局限性, ...

  4. Python爬虫实战——下载小说

    Python爬虫实战--下载小说 前言 第三方库的安装 示例代码 效果演示 结尾 前言 使用requests库下载开源网站的小说 注意:本文仅用于学习交流,禁止用于盈利或侵权行为. 操作系统:wind ...

  5. python爬虫实践(1)爬取图片网站的高清壁纸

    python爬虫实践(1)爬取图片网站的高清壁纸 robots.txt协议: 爬取网站之前首先检查该站点根目录下是否存在robots.txt,如果存在,就会按照该文件中的内容来确定访问的范围:如果该文 ...

  6. python爬虫实践——零基础快速入门(四)爬取小猪租房信息

    上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...

  7. python爬虫实践报告_Python网络爬虫从入门到实践

    本书讲解了如何使用Python编写网络爬虫,涵盖爬虫的概念.Web基础.Chrome.Charles和Packet Capture抓包.urllib.Requests请求库.lxml.Beautifu ...

  8. python爬虫实践 —— 一、入门篇

    Scrapy爬虫实践 -- 一.入门篇 前言 一.选择爬虫框架--Scrapy 二.Scrapy安装 1.引入库 2.安装 3.验证 三.Scrapy的第一个爬虫工程 1. 使用框架创建新工程 2. ...

  9. Python爬虫实践(入门篇)——抓取《天使降临到我身边》图片

    今天就学了一下Python爬虫,于是想实践一下.刚好一周前在B站补完番<天使降临到我身边>--里面的小学生特可爱.情节也不错,心里就比较喜欢这部漫画,所以就想扒一些图片当壁纸.刚好,Pyt ...

最新文章

  1. 如何使用代码美化器Uncrustify (How to use code beautifier Uncrustify)
  2. Mxnet TensorRT
  3. 给你们讲讲我自己是怎么学习Linux系统的
  4. Knative 应用在阿里云容器服务上的最佳实践
  5. redis 分布式锁的实现方式
  6. java读取TXT文件的方法
  7. qq音乐2012绿色版
  8. cmake中添加引用动态链接_C# 添加、编辑、删除PPT中的超链接
  9. Delphi程序开启XP的ClearType显示效果
  10. MSSQL → 04:表的创建与维护
  11. 添加Copy To和Move To 到系统右键菜单中(Vista 也适用)
  12. mysql sql语句遇到错误继续_MySQL从数据库sql语句执行错误解决方法
  13. 三维浮雕软件 linux,立体浮雕工具下载 Type3(立体浮雕软件) v4.6.0.0 免费安装版 下载-脚本之家...
  14. Android 官方推荐 : DialogFragment 创建对话框
  15. php登陆网页版微信代码,php版微信公众平台之微信网页登陆授权示例
  16. 手机使用小技巧,简单易懂 7610用蓝牙发送SIS文件方法(转)
  17. 利用Matplotlib绘制各类图表
  18. 由于这台计算机上储存的远程桌面,“由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断”的解决方案...
  19. java实现“两数之和”
  20. 中国超级计算机gpu,英伟达(NVIDIA)Tesla GPU为全球最快的超级计算机提供动力支持...

热门文章

  1. 伪装成计算机器的加密app,给手机设置“伪装加密”,再不用担心被偷看!
  2. Mac系统下安装MySQL和Navicat
  3. 3GPP R16的Conditional handover配置确认
  4. 全球名校AI课程库(22)| Harvard哈佛 · 计算机科学导论课程『Introduction to Computer Science』
  5. Hibernate异常:Named query not known
  6. 将XML格式化后输出为String
  7. Python 最好大学网大学排名爬取(2020年)
  8. SIP电话(一)之程控交换机-FreeSWITCH的使用总结
  9. 关于浏览器中使用百度定位
  10. 视频教程-尹成老师带你学算法-Java