前一段时间看了B站有关爬虫的视频,自己也想练练手.就抓抓知轩藏书上书籍的评分情况.
关于评分(投票)的内容,是个javascrip编的模块,开始用request抓的时候,没抓到内容.最近学习到了怎么抓js的内容,又想试试看了.
看知轩藏书书籍的链接,就会发现每本书都对应一个编号,如"http://www.zxcs.me/post/12071"
这样我们就可以按照编号来抓
1.获取最新书籍的编号

def get_max():"""获取最新收录的小说的编号:return:"""firsturl="http://www.zxcs.me/"html = requests.get(firsturl,headers = head)html.encoding = 'utf8'soup=BeautifulSoup(html.text,'lxml')max_data = soup.select('body > div.wrap > div:nth-child(1) > div.box > ul > li:nth-child(1) > a')data=str(max_data[0])# print(max_data[0])# print(type(max_data))findlink = re.compile(r'<a href="(.*?)">')link = re.findall(findlink, data)    #获取小说的超链接find_cnt=re.compile(r'(?<=post/)\d+\.?\d*')cnt = re.findall(find_cnt,link[0])     #抓取超链接里面的数字,即编号return int(cnt[0])

抓取书名/作者的信息

def get_name(number):"""提取小说的书名和作者:param number: 小说编号:return: 书名和作者"""url = 'http://www.zxcs.me/post/'novel_url = url+str(number)html = ask_url(novel_url)soup = BeautifulSoup(html,'lxml')title = str(soup.select('#content > h1 ')[0])  #小说的名字啊的信息find_name = re.compile(r'《(.*)》')      # 提取书名,即<<>>之间的内容name = re.findall(find_name,title)[0]find_author = re.compile(r':(.+?)<')author = re.findall(find_author,title)[0]  #提取作者return name,author

然后就是获取评分的信息

def get_rank(number):"""获取小说的评价(投票的结果):param number::return: 投票的结果"""voteurl = 'http://www.zxcs.me/content/plugins/cgz_xinqing/cgz_xinqing_action.php?action=show&id={}'.format(number)vote_html = requests.get(voteurl, headers=head)data1 = vote_html.textdata_split = data1.split(",")# print(data_split)rank_data = []for item in data_split:rank = int(item)rank_data.append(rank)return rank_data

然后就是数据处理,存文件啊啥的
全部的代码

import re    # 正则表达式 进行文字匹配
import urllib.request   # 指定url 获取网页数据
from bs4 import BeautifulSoup    #网页解析,获取数据
import lxml
import xlwt       # 进行excel 操作
import sqlite3    # sqlite3 数据库 操作
import requests
import pandas as pd
import timehead = {  # 模拟浏览器头部信息"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.58"}  # 用户代理,告诉服务器浏览器的类型def main():dbpath ="D:\云盘\我的坚果云\Python\practice\PythonWebSpiderCrashCourseInFiveDay\getDoubanData\zxcs100.db"# init_db(dbpath)# 1 爬取网页max_novel=get_max()# 2 解析数据result = dealData(1000, max_novel)print(list)# 3 保存数据write2Csv(result)write2X(result)def get_max():"""获取最新收录的小说的编号:return:"""firsturl="http://www.zxcs.me/"html = requests.get(firsturl,headers = head)html.encoding = 'utf8'soup=BeautifulSoup(html.text,'lxml')max_data = soup.select('body > div.wrap > div:nth-child(1) > div.box > ul > li:nth-child(1) > a')data=str(max_data[0])# print(max_data[0])# print(type(max_data))findlink = re.compile(r'<a href="(.*?)">')link = re.findall(findlink, data)    #获取小说的超链接find_cnt=re.compile(r'(?<=post/)\d+\.?\d*')cnt = re.findall(find_cnt,link[0])     #抓取超链接里面的数字,即编号return int(cnt[0])def get_name(number):"""提取小说的书名和作者:param number: 小说编号:return: 书名和作者"""url = 'http://www.zxcs.me/post/'novel_url = url+str(number)html = ask_url(novel_url)soup = BeautifulSoup(html,'lxml')title = str(soup.select('#content > h1 ')[0])  #小说的名字啊的信息find_name = re.compile(r'《(.*)》')      # 提取书名,即<<>>之间的内容name = re.findall(find_name,title)[0]find_author = re.compile(r':(.+?)<')author = re.findall(find_author,title)[0]  #提取作者return name,authordef get_rank(number):"""获取小说的评价(投票的结果):param number::return: 投票的结果"""voteurl = 'http://www.zxcs.me/content/plugins/cgz_xinqing/cgz_xinqing_action.php?action=show&id={}'.format(number)vote_html = requests.get(voteurl, headers=head)data1 = vote_html.textdata_split = data1.split(",")# print(data_split)rank_data = []for item in data_split:rank = int(item)rank_data.append(rank)return rank_datadef ask_url(url):request = urllib.request.Request(url, headers=head)html=""try:response=urllib.request.urlopen(request)html=response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code)if hasattr(e,"reason"):print(e.reason)return  htmldef dealData (start,number):"""抓取网页的数据:param start: 开始的小说标号:param number: 最后的小说标号:return: 结果的列表"""result = []for i in range(start,number):data=[]try:title ,author = get_name(i)rank = get_rank(i)data=[i,title,author]+rankresult.append(data)print(i)time.sleep(1)except:continuereturn resultdef write2Csv(datalist):cols=['序列','作者','仙草','粮草' ,'干草', '枯草', '毒草']df = pd.DataFrame(datalist,columns=cols)df.to_csv("zxcs.csv")def write2X(datalist) :workbook = xlwt.Workbook(encoding="utf-8")worksheet = workbook.add_sheet('sheet1', cell_overwrite_ok=True)col = ("序列", "书名", "作者", "仙草", "粮草", "干草", "枯草", "毒草")for i in range(0, 8):worksheet.write(0, i, col[i])for i in range(len(datalist)):for j in range(0, 8):worksheet.write(i+1, j, datalist[j])# savepath1 = ".\\book.xls"workbook.save("zxcs.xls")if __name__ == '__main__':main()

我是个初学者,现在只是实现了这个功能,可以优化的地方还很多,我会继续学习的…
附一个知轩藏书书籍的排名(按仙草3分,粮草1分,枯草-1分,毒草-3分算)

知轩藏书 书籍 评分 的爬虫相关推荐

  1. Java 知网博硕论文信息爬虫

    知网博硕论文信息爬虫 声明 代码 首先声明这段代码,是我刚毕业进公司写的,整个爬虫系统我还没写完,就被调去学python支援公司的某个项目去了,所以代码距离我写文章时候,其实已经过去了大半年有余了,代 ...

  2. 快看这里,豆瓣9.0的Python爬虫宝藏书籍,自学爬虫必备~

    哈喽~大家好!我是恰恰.今天我们来学些什么呢,那就是爬虫啦!说到学习爬虫,相信很多人都是听过一句话,"爬虫爬的好,监狱进的早"!虽然有点夸张的感觉,但是这也侧面说明,如果学会了爬虫 ...

  3. python爬虫知网实例-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  4. 【python爬虫专项(7)】爬虫实战项目一( 豆瓣图书类别的书籍信息数据获取——爬虫逻辑1)

    任意一图书类别的书籍信息数据 参考网址:豆瓣读书网 爬虫逻辑:[分页网页url采集]-[数据信息网页url采集]-[数据采集] 针对爬虫逻辑的三步走,采用函数式编程的方式进行数据爬取 函数1: get ...

  5. python书籍推荐-Python爬虫开发与项目实战

    所属网站分类: 资源下载 > python电子书 作者:doit 链接: http://www.pythonheidong.com/blog/article/466/ 来源:python黑洞网  ...

  6. python批量查询豆瓣书籍评分(教程附源码)

    在懒人盘分享的高分电子书是利用python批量查询得到的 发现常规的豆瓣api不允许调用了,几番搜索发现一个接口 https://book.douban.com/j/subject_suggest?q ...

  7. python爬虫教程书籍-Python网络爬虫实例教程(视频讲解版)

    第1章 网络爬虫概述 1 1.1 认识网络爬虫 1 1.1.1 网络爬虫的含义 1 1.1.2 网络爬虫的主要类型 2 1.1.3 简单网络爬虫的架构 3 1.1.4 网络爬虫的应用场景 3 1.2 ...

  8. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

  9. 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型

    Python网络爬虫权威指南 编辑推荐 适读人群 :需要抓取Web 数据的相关软件开发人员和研究人员 作为一种采集和理解网络上海量信息的方式,网页抓取技术变得越来越重要.而编写简单的自动化程序(网络爬 ...

最新文章

  1. Redis集群:一致性哈希
  2. c++使用cin输入数据
  3. 央视是否需要cntv.com域名?
  4. c++ array 模板类使用
  5. django学习资料网址汇总
  6. TS对象中的实例属性和静态属性
  7. hdu 3037 Lucas定理
  8. windows server2003 xp化
  9. 初识window phone 7程序
  10. mybatis中的三种多表查询的方式详解,业务装配,N+1,多表查询的sql
  11. ggplot2 绘制火山图
  12. 如何用excel制作饼图
  13. JAVA WEB开发技术作业 HTML国家奖学金申请审批表
  14. Java判断手机号格式是否正确
  15. vue脚手架结构目录文件
  16. 手写数字识别问题实战
  17. 水库安全监测自动化系统解决方案
  18. 2022-2027年中国激光雷达行业市场调研及未来发展趋势预测报告
  19. 编码:中文字符转ASCII码
  20. MATLAB通信工具箱仿真16QAM系统

热门文章

  1. js 树形结构数据 已知某一子节点 一次向上获取所有父节点
  2. 可否推荐一个香港主机?
  3. 苹果手机滑动光标怎么设置_苹果手机移动的光标怎么设置出来
  4. 虚拟化开源技术有哪些_您使用哪些开源虚拟化工具?
  5. 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。
  6. 最新DOS启动盘制作全攻略
  7. 第二十三章 Unity 材质
  8. Python读取和写入excel文件
  9. Java面向对象和面向过程的区别
  10. AWS云上基础服务体验课程