啧,放假几天游戏玩腻了,啥都不想干,突然想起来python这玩意,无聊就来玩玩
目录
先是保存csv里面
然后保存到mysql里
目标:起点
主要是拿到这几个数据
分析下网页
一个li对应一本小说,打开li看里面的东西
首先是排名
xpath来一下
//div[@class="book-img-text"]/ul/li//div[1]/span/text()
名字在第二个div里面
接着是作者
类型
最后是章节和更新时间
直接上代码
导入库
import pymysqlimport requestsimport parselimport csv
pymysql是连接mysql
requests是请求库
parsel是解析库
csv是保存到csv文件里面
看一下网址,拿一下请求头,然后直接请求
url = 'https://www.xxxx.com/rank/readindex/page1/'#网址在评论区headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}resp = requests.get(url=url, headers=headers)resp.encoding = resp.apparent_encodingprint(resp.text)
接着解析上面的几个数据
selector = parsel.Selector(resp.text)li_list = selector.xpath('//div[@class="book-img-text"]/ul/li')for li in li_list:pai_ming = li.xpath('./div[1]/span/text()').get()title = li.xpath('./div[2]/h2/a/text()').get()man = li.xpath('./div[2]/p[1]/a[1]/text()').get()lei_xing = li.xpath('./div[2]/p[1]/a[2]/text()').get()zui_xin = li.xpath('./div[2]/p[3]/a/text()').get()zui_xin_shi_jian = li.xpath('./div[2]/p[3]/span/text()').get()print(pai_ming, title, man, lei_xing, zui_xin, zui_xin_shi_jian)
li_list是直接定位到所有标签,用for来拿到li里面的数据,最后再打印
都拿到了,接着就是保存了
先是保存csv里面
k = pai_ming, title, man, lei_xing, zui_xin, zui_xin_shi_jianwith open("qi.csv",mode="a",newline="",encoding='GBK') as f:a = csv.writer(f)a.writerow(k)
这里把数据的变量给一个新的变量,下面会方便好多,newline是换行,接着encoding用gbk,我这用pycharm打开csv文件正常,但是用电脑打开是乱码的,所以用gbk,如果电脑打开都正常的话直接用utf-8就行了,writerow是写入方法,用writerow直接传一个变量就行了,如果用writerows就要把数据的变量全给它丢进去,麻烦。
保存后用pycharm打开看看
Excel打开也没事
完事。
然后保存到mysql里
首先打开mysql,创建新的数据库来储存数据
创建数据库
create database qidianxiaoshuodb charset utf8;
切换到数据库里面
use qidianxiaoshuodb;
创建表
create table qidianxiaoshuodb(排名 varchar(50),名字 varchar(500),作者 varchar(500),类型 varchar(50),最新章节 varchar(500),更新时间 varchar(500),)charset=utf8;
回到pycharm开始连接mysql
db = pymysql.connect(host='localhost', user='root', password='xxxxxx', database='qidianxiaoshuodb', charset='utf8')cursor = db.cursor()
执行sql语句
ins = 'insert into qidianxiaoshuodb values(%s,%s,%s,%s,%s,%s)'xiao_shuo = [pai_ming, title, man, lei_xing, zui_xin, zui_xin_shi_jian]cursor.execute(ins, xiao_shuo)db.commit()
这里有多少个数据就弄几个%s
commit是提交到数据库执行
最后断开数据库连接
cursor.close()db.close()
效果如图
多来几页
for i in range(1,5):url = f'https://www.qidian.com/rank/readindex/page{i}/'
完整代码如下
import pymysqlimport requestsimport parselimport csvdb = pymysql.connect(host='localhost', user='root', password='xxxxxxxx', database='qidianxiaoshuodb', charset='utf8')cursor = db.cursor()for i in range(1,5):url = f'https://www..com/rank/readindex/page{i}/'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}resp = requests.get(url=url, headers=headers)resp.encoding = resp.apparent_encodingselector = parsel.Selector(resp.text)li_list = selector.xpath('//div[@class="book-img-text"]/ul/li')for li in li_list:pai_ming = li.xpath('./div[1]/span/text()').get()title = li.xpath('./div[2]/h2/a/text()').get()man = li.xpath('./div[2]/p[1]/a[1]/text()').get()lei_xing = li.xpath('./div[2]/p[1]/a[2]/text()').get()zui_xin = li.xpath('./div[2]/p[3]/a/text()').get()zui_xin_shi_jian = li.xpath('./div[2]/p[3]/span/text()').get()print(pai_ming, title, man, lei_xing, zui_xin, zui_xin_shi_jian)k = pai_ming, title, man, lei_xing, zui_xin, zui_xin_shi_jianwith open("qi.csv",mode="a",newline="",encoding='GBK') as f:a = csv.writer(f)a.writerow(k)ins = 'insert into qidianxiaoshuodb values(%s,%s,%s,%s,%s,%s)'xiao_shuo = [pai_ming, title, man, lei_xing, zui_xin, zui_xin_shi_jian]cursor.execute(ins, xiao_shuo)db.commit()cursor.close()db.close()