python爬虫把数据保存到csv、mysql中

news2024/11/17 21:40:35

啧,放假几天游戏玩腻了,啥都不想干,突然想起来python这玩意,无聊就来玩玩

目录

先是保存csv里面

然后保存到mysql里


目标:起点

主要是拿到这几个数据

 

分析下网页

一个li对应一本小说,打开li看里面的东西

首先是排名

xpath来一下

//div[@class="book-img-text"]/ul/li//div[1]/span/text()

 名字在第二个div里面

接着是作者

 

类型

 

最后是章节和更新时间

 

直接上代码

导入库

import pymysql
import requests
import parsel
import 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_encoding
print(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_jian
    with 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 pymysql
import requests
import parsel
import csv
db = 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_encoding
    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)
        k = pai_ming, title, man, lei_xing, zui_xin, zui_xin_shi_jian
        with 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android ViewPager2 实现阅读器横向翻页效果(三)--- 实时动态分页及章节切换效果的原理及实现

文章目录Android ViewPager2 实现阅读器横向翻页效果(三)--- 实时动态分页及章节切换效果的原理及实现关键概念引入初始数据准备ViewPager Adapter 动态分页 及 第一次分页分页后更新窗口 及 首页尾页的特殊处理翻页状态监听 及 动态章节切换Android Vie…

BIT.4 Linux进程控制

目录进程创建fork函数初识写实拷贝fork常规用法fork调用失败的原因补充知识进程终止进程退出场景进程常见退出方法exit函数与_exit函数return 退出补充知识进程等待进程等待必要性进程等待的方法wait方法waitpid方法wait / waitpid 阻塞代码WIFEXITEDwait / waitpid 非阻塞代码…

LeetCode刷题复盘笔记—一文搞懂动态规划之718. 最长重复子数组问题(动态规划系列第三十一篇)

今日主要总结一下动态规划的一道题目,718. 最长重复子数组 题目:718. 最长重复子数组 Leetcode题目地址 题目描述: 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1: …

华熙LIVE·五棵松商业北区明年国庆亮相 互动体验升级

京城着名的活力聚集地——华熙LIVE五棵松明年将增添两万多平米商业区,新增商业区位于现有商业区北侧并与之相连通,业态在承袭现有沉浸式互动体验业态基础上,将引进元宇宙等前沿科技和跳楼机等娱乐设施,使互动体验进一步升级。项目…

一文搞懂Linux内核中断机制原理与实现

为什么需要中断? 如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,因为外设的处理速度一般慢于CPU,而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知内核,会是一个聪明的方式&a…

JWT渗透与攻防(一)

目录 前言 JWT漏洞介绍 案列演示之Leaky_JWT JWT漏洞具体的实现方式: 案列演示之JWT None Algorithm JWT漏洞工具的利用 JWT利用工具介绍 jwt_tool 漏洞利用 jwt-cracker c-jwt-cracker 前言 Json web token (JWT)相关漏洞对于渗透测试人员而言可能是一种…

node.js+uni计算机毕设项目店内点餐微信小程序LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

【Pandas入门教程】如何从现有列派生新列

如何从现有列派生新列 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何从现有列派生新列导包数据集准备【1】如…

C++——STL之stack和queue详解

C——STL之stack和queue详解🏐什么是stack和queue🏐stack和queue的实现🏀什么是deque🏀stack的模拟实现🏀queue的模拟实现🏐优先级队列(priority_queue)🏀优先级队列的实现⚽push⚽p…

Spring Authorization Server1.0 介绍与使用

一、版本使用 1、Java&#xff1a;17或者更高的版本。 2、springboot 3.0 3、Spring Authorization Server 1.0版本。 <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-authorization-server</ar…

使用proxy_pool来为爬虫程序自动更换代理IP

文章目录1. 前言2. 教程3. 官网4. 在线demo4.1. 本地部署4.2. 安装4.2.1. Python源码构建安装4.2.1.1. 安装redis数据库4.2.1.1.1. 下载redis源码4.2.1.1.2. 启动redis服务4.2.1.1.3. 安装redis服务4.2.1.1.4. 再次通过命令启动redis服务4.2.1.1.5. 测试redis服务是否可用4.2.1…

node.js+uni计算机毕设项目基于微信小程序的车位共享系统LWPPT(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

C语言程序设计--银行管理系统

主界面 登入界面 #include <stdio.h> #include <malloc.h> #include <conio.h> #include <time.h> #include <windows.h> #define MB_ICONINFORMATION MB_ICONASTERISK //对 错误 struct account_information /…

腾讯云轻量应用服务器使用Matomo 应用镜像搭建网站流量统计系统!

Matomo 是一款开源的网站数据统计软件&#xff0c;可以用于跟踪、分析您的网站的流量&#xff0c;同时充分保障数据安全性、隐私性。该镜像基于 CentOS 7.6 64位操作系统&#xff0c;已预置 Nginx、MariaDB、PHP 软件。本文介绍如何使用 Matomo 快速搭建您的网站流量统计系统。…

【文本检测】2、DBNet++ | 为 DBNet 引入多级特征图聚合模块 ASF

文章目录一、背景二、方法2.1 Adaptive Scale Fusion (ASF) 模块2.2 Binarization2.3 Adaptive Threshold2.4 Deformable Convolution2.5 Label Generation2.6 Optimization三、效果论文&#xff1a;Real-Time Scene Text Detection with Differentiable Binarization and Adap…

Hadoop综合项目——二手房统计分析(可视化篇)

Hadoop综合项目——二手房统计分析&#xff08;可视化篇&#xff09; 文章目录Hadoop综合项目——二手房统计分析&#xff08;可视化篇&#xff09;0、 写在前面1、数据可视化1.1 二手房四大一线城市总价Top51.2 统计各个楼龄段的二手房比例1.3 统计各个城市二手房标签的各类比…

人工智能轨道交通行业周刊-第27期(2022.12.12-12.25)

本期关键词&#xff1a;虚拟中台、智轨、数字员工客服、钢轨光带异常、小目标检测 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨…

4、前端笔记-JS-数据类型

1、数据类型简介 1.1为什么需要数据类型 不同的数据占用的存储空间不同&#xff0c;为了充分利用存储空间&#xff0c;便于把数据分成所需内存大小不同的数据&#xff0c;定义了不同的数据类型 1.2变量的数据类型 js是弱类型&#xff08;动态语言&#xff09;的语言&#x…

这12类Oracle日期函数,全都给你总结了

在使用Oracle数据库过程中&#xff0c;对日期的使用不可避免&#xff0c;那Oracle中的日期函数有哪些呢&#xff1f;本篇就日期函数进行整理了&#xff0c;不一定全部了解记住&#xff0c;但是要做到心中有数&#xff0c;以后在写脚本的时候就不会绕弯子了。 1、sysdate、curr…

大话设计模型 Task05 状态、适配、单例

目录一、状态模式问题描述问题分析模式定义代码实现二、适配器模式问题描述问题分析模式定义代码实现三、单例模式问题描述问题分析模式定义代码实现一、状态模式 问题描述 假设我们要描述一名员工一天不同时间的工作状态&#xff0c;正常来看是比较简单的&#xff0c;直接从…