ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对纵横小说网签约作家作品数据进行爬取与分析

2021-12-28 16:33:30  阅读:252  来源: 互联网

标签:plt url 爬取 soup html def 小说网 book 签约


(一)选题背景

         当今世界电子小说阅读走进千家万户,其中各大网络电子小说网站更是琳琅满目,为了 探寻网站签约作家的各小说作品的热度对比。

  我选择了纵横小说网的无罪作家来作为我本学期爬虫程序设计作业。

(二)主题式网络爬虫设计方案

      1.主题式网络爬虫名称:

       对纵横小说网签约作家作品数据进行爬取与分析

     2.主题式网络爬虫爬取的内容与数据待征分析

          http://home.zongheng.com/show/userInfo/110992.html

          http://www.zongheng.com/

          爬取纵横小说网中无罪作家的各本小说的书名和点击量

    3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

         从源代码页面爬取书籍url地址:

         爬取书籍名称和点击量:

         然后把名称和点击量等数据制成折线图,直方图,饼图。

(三)主题页面的结构特征分析

     1..主题页面的结构与特征分析

 

 

 

 

     2.Htmls 页面解析

 

 

 

 

 

 

    (四)网络爬虫程序设计

        数据爬取与采集和清洗

  • #需要爬取的网站的url
  • url = 'http://www.zongheng.com/'
  • #获取页面信息
  • def gethtml(url):'http://home.zongheng.com/show/userInfo/110992.htm'
  • info = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'}
  • try:
  • data = requests.get(url, headers=info)
  • data.raise_for_status()
  • data.encoding = data.apparent_encoding
  • return data.text
  • except:
  • return " "
  •  

     

  • #书籍url
  • def urlinfo(url):
  • books = []
  • book = gethtml(url)
  • soup = BeautifulSoup(book, "html.parser")
  • #获取属性为tit的p标签
  • p = soup.find_all("p", attrs="tit")
  • for item in p:
  • #获取书籍地址
  • books.append(item.a.attrs['href'])
  • return books
  • #点击量信息
  • def numsinfo(html):
  • n = []
  • soup = BeautifulSoup(html, 'html.parser')
  • div = soup.find_all("div", attrs='nums')
  • nums = div[0]
  • i = 0
  • for spa in nums.find_all("i"):
  • if i == 2:
  • #获取点击量
  • n.append(spa.string.split('.')[0])
  • break
  • i += 1
  • return n
  • #书名信息
  • def namesinfo(html):
  • soup = BeautifulSoup(html, 'html.parser')
  • #获取属性为book-name的div
  • name = soup.find_all("div", attrs='book-name')
  • #正则获取中文书名
  • namess = re.findall(r"[\u4e00-\u9fa5]+", str(name[0]))
  • return namess

    文本分析

  • def file(book, nums, address):
  • # 创建Excel
  • excel = xlwt.Workbook(encoding='utf-8')
  • #创建表
  • sheet1 = excel.add_sheet(u'One', cell_overwrite_ok=True)
  • #写入列名
  • sheet1.write(0, 0, 'book')
  • sheet1.write(0, 1, 'number')
  • for i in range(1, len(book)):
  • sheet1.write(i, 0, book[i])
  • for j in range(1, len(number)):
  • sheet1.write(j, 1, number[j])
  • excel.save(address)

 

 数据分析与可视化

 

#柱形图

from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
x = ['渡劫之王', '巴山剑扬', '平天策', '神仙职员', '剑王朝', '流氓高手', '仙侠世界', '仙魔变',
'罗浮', '冰火破坏神', '众神王座']
y = [3255112,400640,3062812,913820,2325362,1113306,2723772,2807917,2436869,2224430,1007224]

plt.bar(x, y)
plt.title('纵横小说网无罪')
plt.xlabel('作品')
plt.ylabel('点击量')
plt.xticks(rotation=45)
plt.show()

将以上各部分的代码汇总,附上完整程序代码

  1. #导入相关库
  2. from bs4 import BeautifulSoup
  3. import requests
  4. import matplotlib
  5. import re
  6. import xlwt
  7. import matplotlib.pyplot as plt
  8. #需要爬取的网站的url
  9. url = 'http://www.zongheng.com/'
  10. #获取页面信息
  11. def gethtml(url):'http://home.zongheng.com/show/userInfo/110992.htm'
  12. info = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'}
  13. try:
  14. data = requests.get(url, headers=info)
  15. data.raise_for_status()
  16. data.encoding = data.apparent_encoding
  17. return data.text
  18. except:
  19. return " "
  20. #书籍url
  21. def urlinfo(url):
  22. books = []
  23. book = gethtml(url)
  24. soup = BeautifulSoup(book, "html.parser")
  25. #获取属性为tit的p标签
  26. p = soup.find_all("p", attrs="tit")
  27. for item in p:
  28. #获取书籍地址
  29. books.append(item.a.attrs['href'])
  30. return books
  31. #点击量信息
  32. def numsinfo(html):
  33. n = []
  34. soup = BeautifulSoup(html, 'html.parser')
  35. div = soup.find_all("div", attrs='nums')
  36. nums = div[0]
  37. i = 0
  38. for spa in nums.find_all("i"):
  39. if i == 2:
  40. #获取点击量
  41. n.append(spa.string.split('.')[0])
  42. break
  43. i += 1
  44. return n
  45. #书名信息
  46. def namesinfo(html):
  47. soup = BeautifulSoup(html, 'html.parser')
  48. #获取属性为book-name的div
  49. name = soup.find_all("div", attrs='book-name')
  50. #正则获取中文书名
  51. namess = re.findall(r"[\u4e00-\u9fa5]+", str(name[0]))
  52. return namess
  53. #修复中文方框
  54. matplotlib.rcParams['font.sans-serif'] = ['SimHei']
  55. matplotlib.rcParams['font.family'] = 'sans-serif'
  56. matplotlib.rcParams['axes.unicode_minus'] = False
  57. #柱形图
  58. from matplotlib import pyplot as plt
  59. plt.rcParams['font.sans-serif'] = ['SimHei']
  60. x = ['渡劫之王', '巴山剑扬', '平天策', '神仙职员', '剑王朝', '流氓高手', '仙侠世界', '仙魔变',
  61. '罗浮', '冰火破坏神', '众神王座']
  62. y = [3255112,400640,3062812,913820,2325362,1113306,2723772,2807917,2436869,2224430,1007224]
  63. plt.bar(x, y)
  64. plt.title('纵横小说网无罪')
  65. plt.xlabel('作品')
  66. plt.ylabel('点击量')
  67. plt.xticks(rotation=45)
  68. plt.show()
  69. def file(book, nums, address):
  70. # 创建Excel
  71. excel = xlwt.Workbook(encoding='utf-8')
  72. #创建表
  73. sheet1 = excel.add_sheet(u'One', cell_overwrite_ok=True)
  74. #写入列名
  75. sheet1.write(0, 0, 'book')
  76. sheet1.write(0, 1, 'number')
  77. for i in range(1, len(book)):
  78. sheet1.write(i, 0, book[i])
  79. for j in range(1, len(number)):
  80. sheet1.write(j, 1, number[j])
  81. excel.save(address)
  82. #列表元素类型转换
  83. def convert(lista):
  84. listb = []
  85. for i in lista:
  86. listb.append(i[0])
  87. return listb
  88. def main():
  89. #作者页面
  90. author = 'http://home.zongheng.com/show/userInfo/110992.html'
  91. user = '无罪'
  92. urls = urlinfo(author)
  93. namelist = []
  94. countlist = []
  95. for url in urls:
  96. html = gethtml(url)
  97. namelist.append(namesinfo(html))
  98. countlist.append(numsinfo(html))
  99. namelist = convert(namelist)
  100. countlist = convert(countlist)
  101. for i in range(len(countlist)):
  102. countlist[i] = int(countlist[i])
  103. #保存地址
  104. addr = f'D:\\{xxj}.xls'
  105. file(namelist, countlist, addr)
  106. Bar(namelist, countlist, user)
  107. if __name__ == '__main__':
  108. main()

五、总结

     通过这次对python爬虫的实战运用我深刻认识到了自己学习上的不足,期间查阅借鉴了很多学长学姐的资料,从头开始一步步慢慢摸索最终完成了这次的课程设计。

期间在matplotliib绘制图形的学习上下了很大功夫,对网站的页面解析也是非常棘手,但本次学习让我深刻认识到python工具的强大,让我对编程语言产生了兴趣,希

望自己的在接下来的学习中可以进步,在爬虫方面的能力提升。

标签:plt,url,爬取,soup,html,def,小说网,book,签约
来源: https://www.cnblogs.com/xxjhoome/p/15740928.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有