使用Python爬取笔趣阁小说列表并添加到
来源:互联网 发布:光盘直接复制数据 编辑:程序博客网 时间:2024/06/04 18:48
1:首先需要安装爬虫所需要的第三方库
- requests
- BeautifulSoup
- pymysql或者sqllit3(安装python自带)
- lxml 解析器
2:安装完之后接下来是代码部分:
首先新建一个sql帮助类 SqlServerHelper.py
# -*- coding: UTF-8 -*-#!/usr/bin/env python#-------------------------------------------------------------------------------# Name: Mir_LongZd# Purpose:# 操作数据库帮助类# Author: Longimport pymysqlimport sqlite3class MSSQL: """ 初始化数据库 """ def __init__(self,host,user,pwd,db): self.host=host self.user=user self.pwd=pwd self.db=db """ 获取connection """ def __GetConnect(self): if not self.db: raise (NameError,"没有设置数据库信息") self.conn=pymysql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8") cur = self.conn.cursor() if not cur: raise(NameError,"连接数据库失败") else: return cur def ExecQuery(self,sql): cur = self.__GetConnect() cur.execute(sql) resList = cur.fetchall() #查询完毕后必须关闭连接 self.conn.close() return resList def ExecNonQuery(self,sql): cur = self.__GetConnect() cur.execute(sql) self.conn.commit() self.conn.close()"""sqllit3操作数据库"""class SQLLIT: def __init__(self,dbpath): self.dbpath=dbpath def __Getcontent(self): if str(self.dbpath)=="" or self.dbpath is None: raise (NameError,"没有数据库") else: self.conn=sqlite3.connect(self.dbpath) self.cu=self.conn.cursor() if not self.cu: raise(NameError,"连接数据库失败") else: return self.cu # #查 # def GetList(self,sql): cur = self.__Getcontent() cur.execute(sql) resList = cur.fetchall() #查询完毕后必须关闭连接 self.conn.close() return resList # #增删改 # def ExecNonQuery(self,sql): cur = self.__Getcontent() cur.execute(sql) self.conn.commit() self.conn.close()
然后我们在建一个发起请求的帮助类
# -*- coding: UTF-8 -*-#!/usr/bin/env python#-------------------------------------------------------------------------------# Name: Mir_LongZd# Purpose:# 爬取网页帮助类# Author: Longimport requestsfrom bs4 import BeautifulSoupclass RequestHelper: def __init__(self,url,encoding): if url is not None and str(url)!="": self.wb_data=requests.get(url) self.wb_data.encoding=encoding else: raise (NameError,"请输入爬取地址") def GetContent(self,select): self.soup=BeautifulSoup(self.wb_data.text,'lxml') self.select_data=self.soup.select(select) return self.select_data
我们先看下笔趣阁网站 ,分析下网页
这里我们只爬取这些列表
f12可以看到文章名和作者所在的层级,找到元素之后我们就可以用代码实现爬取了
# -*- coding: UTF-8 -*-#!/usr/bin/env python#-------------------------------------------------------------------------------# Name: Mir_LongZd# Purpose:# 爬取笔趣阁小说网站# Author: Longimport requests #导入模块from bs4 import BeautifulSoupimport datetimefrom Helper.RequestHe import RequestHelper #导入帮助类import uuid #guidfrom Helper.SqlServerHelper import SQLLIT #导入数据库帮助类url="http://www.biquzi.com/xuanhuan/" #发起请求 笔趣阁网站wb_data=RequestHelper(url,"gbk")href_data=wb_data.GetContent("#newscontent .l li .s2 a")#获取书名集合au_data=wb_data.GetContent("#newscontent .l li .s5")#获取作者au_href=[]novellist=[]#存储文章章节列表for h,a in zip(href_data,au_data):#循环获取的书名和作者 getdata={ 'guid':str(uuid.uuid1()), 'href':h.get("href"), 'title':h.string, 'author':a.string } au_href.append(getdata) #将字典加入到列表中 便于后面操作 """ 将循环的数据加入到数据库中 """""" 将循环的数据加入到数据库中 """for item in au_href:#遍历所有的小说 data=SQLLIT("C:\\Users\Mir_LongZd\\Documents\\py.db") #实例化数据库方法 t_url=item['href'] guid=item['guid'] selectsql="select count(1) FROM novel WHERE ID='"+guid+"' and title='"+item['title']+"' " count=tuple(data.GetList(selectsql)) #data.GetList(selectsql)返回的是一个元组 if count[0][0]>0:#判断是否存在次记录,不存在则添加 print(count[0][0]) print("大于0") print(len(data.GetList(selectsql))) else: insertsql="insert INTO novel VALUES('"+guid+"','"+item['title']+"','"+item['author']+"','"+t_url+"') " data.ExecNonQuery(insertsql) #执行数据添加操作 """ 根据当前的小说连接发起requests请求,抓取该小说对应的章节 """ t_data=RequestHelper(t_url,"gbk") soup=t_data.GetContent("#list dd a") for item1 in soup:#遍历抓取的章节 href=item1.get("href") title=item1.string t_selectsql="select count(1) FROM novel_list WHERE pid='"+guid+"' and title='"+title+"' " t_count=tuple(data.GetList(t_selectsql)) if t_count[0][0]>0: print("大于0") else: t_insertsql="insert INTO novel_list VALUES('"+str(uuid.uuid1())+"','"+title+"','"+guid+"','"+href+"') " data.ExecNonQuery(t_insertsql)#执行数据添加操作
执行完之后 等待 我们查看下sqllit数据库
可以看到数据已经添加进来了
阅读全文
1 0
- 使用Python爬取笔趣阁小说列表并添加到
- 使用python抓取小说
- 使用JavaScript以,号分割文本框内容为数组并添加到下拉列表
- 通过POST请求得到数据,并添加到列表显示
- 移植python到嵌入式linux上并添加json库
- java小说上传到txt功能实现(相同的小说不能再次添加)
- Python定义并使用列表和元组操作实例
- python实现下载小说并保存在本地
- Python爬虫系列:爬取小说并写入txt文件
- 每天一个JavaScript实例-提取所有链接并添加到页面末尾列表
- MVP模式实现网络请求数据并添加到列表(Rxjava+Retrofit)
- NetUserAdd新建用户并使用NetLocalGroupAddMembers添加到组
- NetUserAdd新建用户并使用NetLocalGroupAddMembers添加到组
- iOS使用定时器,并添加到子线程运行
- 使用 dijit.byId 连接到一个按钮并添加事件
- NetUserAdd新建用户并使用NetLocalGroupAddMembers添加到组
- 添加系统图象列表到列表控件
- 添加字段列表到ComboBox
- 第四章 第六节:多表更新
- ElasticSearch Java api 详解_V1.0
- Graitec.Advance.Concrete.v8.1.Full-ISO 1CD(建筑制图软件)
- Prime Gap
- Light---加载场景无灯光原因
- 使用Python爬取笔趣阁小说列表并添加到
- 基于springboot的框架搭建(1)项目基本介绍
- iOS-NSRunlLoop 实现原理和理解
- pat:L1-035. 情人节
- Vue2.0 学习笔记
- PDOStatement::bindParam 、bindValue、bindColumn实例比较
- JavaWeb之高级分页查询
- 导入图片时设置默认格式
- js中的return布尔值的用法和原理