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

(一)选题背景

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

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

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

      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工具的强大,让我对编程语言产生了兴趣,希

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

上一篇:python爬取小说


下一篇:读自己的笔记产生的随笔