爬虫笔记13——网页爬取数据写入MySQL数据库,以阿里recruit为例

下载pymysql库

需要下载pymysql库,以便于在程序中连接MySQL数据库

pip install pymysql
# 或者使用国内的镜像文件,安装会快一点
pip install pymysql -i https://pypi.douban.com/simple

需要安装MySQL,并创建使用数据库

安装MySQL可以看这里。
创建一个数据库:

create database 数据库名 charset=utf8;
use 数据库名;

在python程序中我们可以这样连接数据库:

import pymysqldef connectMySql():#连接数据库,使用上下文管理器方便执行结束自动退出with pymysql.connect(host='127.0.0.1', user='root', password='root', database='testdb') as db:#创建游标,类似于鼠标吧,对到SQL语句执行with db.cursor() as cursor:cursor.execute('select * from users;')data = cursor.fetchall()print(data)print('程序结束!')connectMySql()

以上是基本的数据库连接操作,下面例子是爬取阿里招聘岗位信息的爬虫程序:

import pymysql
import requests
import timeclass SpiderALi:#python类创建实例对象自动运行def __init__(self):self.url = 'https://careers.aliyun.com/position/search'#headers其实只留下个‘User-Agent’就可以了,其他可以不用,这是cUrl复制过来的self.headers = {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q=0.9","bx-v": "2.5.11","cache-control": "no-cache","content-type": "application/json","origin": "https://careers.aliyun.com","pragma": "no-cache","priority": "u=1, i","referer": "https://careers.aliyun.com/off-campus/position-list?lang=zh","sec-ch-ua": "\"Chromium\";v=\"124\", \"Google Chrome\";v=\"124\", \"Not-A.Brand\";v=\"99\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-origin",'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'}self.requestData = {'channel': 'group_official_site','language': 'zh','batchId': '','categories': '','deptCodes': [],'key': '','pageIndex': 1,'pageSize': 10,'regions': '','subCategories': '',}self.params = {'_csrf': '378212c5-83ef-42bb-a25c-3780f7f3ab09',}self.cookies = '去请求头里面找到cookies复制过来即可'self.connectMySql = pymysql.connect(host='127.0.0.1', user='root', password='你设置的密码,一般也是root', database='py_spider')self.cursor = self.connectMySql.cursor()#python类的生命周期,该魔术方法在实例对象销毁时自动执行def __del__(self):print('爬取结束,退出数据库!')self.cursor.close()self.connectMySql.close()#获取岗位信息def get_works(self):for i in range(1, 53):self.requestData["pageIndex"] = iresponse = requests.post(url=self.url,headers=self.headers,json=self.requestData,params=self.params,cookies=self.cookies).json()yield response["content"]["datas"]#创建表,不存在则创建def create_table(self):sql = """create table if not exists ali_works (id int primary key auto_increment,work_name varchar(100) not null,categories varchar(50),workLocations varchar(50),requirement text,description text,nowtime date);"""try:self.cursor.execute(sql)print('表创建成功!')except Exception as e:print('表创建失败:', e)#插入数据def insert_info(self, *args):""":param args:id int primary key auto_increment,work_name varchar(100) not null,categories varchar(50),workLocations varchar(50),requirement text,description text:return:"""sql = """insert into ali_works value (%s, %s, %s, %s, %s, %s, %s)"""try:self.cursor.execute(sql, args)print('数据插入成功')self.connectMySql.commit()except Exception as e:print('数据插入失败:', e)self.connectMySql.rollback()#主函数def main(self):self.create_table()time.sleep(2)allWorkLists = self.get_works()work_id = 0# 获取当前时间戳timestamp = time.time()# 转换为本地时间local_time = time.localtime(timestamp)# 格式化为日期date = time.strftime('%Y-%m-%d', local_time)for index, workLists in enumerate(allWorkLists):print(f'正在插入第{index+1}页数据')time.sleep(1.5)for work in workLists:work_name = work["name"]categories = work["categories"][0] if work["categories"] else 'null'workLocations = work["workLocations"]requirement = work["requirement"]description = work["description"]self.insert_info(work_id, work_name, categories, workLocations, requirement, description, date)if __name__ == '__main__':spiderALi = SpiderALi()spiderALi.main()

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

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

相关文章

【ajax基础】回调函数地狱

一:什么是回调函数地狱 在一个回调函数中嵌套另一个回调函数(甚至一直嵌套下去),形成回调函数地狱 回调函数地狱存在问题: 可读性差异常捕获严重耦合性严重 // 1. 获取默认第一个省份的名字axios({url: http://hmaj…

【流星蝴蝶剑game】

由于《流星蝴蝶剑》是一款较旧的游戏,而且我无法提供受版权保护的游戏的代码,我将提供一个简单的2D游戏编程实例,以展示如何使用Unity引擎和C#语言来创建一个基本的游戏。这个例子将涉及到创建一个玩家角色,使其能够移动并收集物品…

5.什么是C语言

什么是 C 语言? C语言是一种用于和计算机交流的高级语言, 它既具有高级语言的特点,又具有汇编语言的特点 非常接近自然语言程序的执行效率非常高 C语言是所有编程语言中的经典,很多高级语言都是从C语言中衍生出来的, 例如:C、C#、Object-C、…

Android招聘市场技术要求越来越高,从事三年开发是否应该考虑转行?

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。 不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧! 《Framework精编…

Unity 字体创建时候容易导致字体文件不正确的一种情况

上面得到了两种字体格式,一种是TextMeshPro的,另一种是Unity UI系统中默认使用的字体资源。其原因是创建的位置不同导致的。 1.下面是TextMeshPro字体创建的位置 2:下面是Unity UI系统中默认使用的字体资源

【FreeRTOS】任务状态改进播放控制

这里写目录标题 1 任务状态1.1 阻塞状态(Blocked)1.2 暂停状态(Suspended)1.3 就绪状态(Ready)1.4 完整的状态转换图 2 举个例子3 编写代码 参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 本节课实现音乐任务的创建,音乐播放的暂停与继续播放,删…

nf_tables

nf_tables nf_tables 是 Linux 内核中的一个组件,属于 netfilter 子系统的一部分。它的作用类似于 iptables,都是用于配置和执行网络相关的规则,实现防火墙的功能。以下是 nf_tables 的一些主要作用和特点: 规则集管理&#xff1…

算法竞赛创新实践总结

目录 1 算法题目................................... 3 1.1 盛最多水的容器.......................... 3 1.1.1 题目................................ 3 1.1.2 双指针.............................. 4 1.1.3 代码................................ 5 1.2 分巧克力...…

spring-依赖注入DI

Setter注入: 1、引用类型:在bean中定义引用类型属性并提供可访问的set方法,配置中使用property标签ref属性注入引用类型对象; 2、简单类型:在bean中定义引用类型属性并提供可访问的set方法,在配置中使用pr…

反馈时延与端到端拥塞控制

先从 越来越无效的拥塞控制 获得一个直感。 开局一张图,剩下全靠编。这是一道习题: 这图来自《高性能通信网络(第二版)》,2002 年的书,很好很高尚,目前这种书不多了。不准备做这道题,但意思要明白&#x…

Docker 拉取镜像失败处理 配置使用代理拉取

解决方案 1、在 /etc/systemd/system/docker.service.d/http-proxy.conf 配置文件中添加代理信息 2、重启docker服务 具体操作如下: 创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置 代码语言:javascript 复…

如何使得 `git pull origin master`不出现`Merge branch master for `这样的字样?

文章目录 引言使用 git pull --rebase配置 Git 默认使用 rebase 引言 当你执行 git pull origin master 时,Git 默认会执行 git fetch 紧接着 git merge,这可能会导致产生 “Merge branch ‘master’ of…” 样式的提交信息,尤其是在有冲突需…

【python】webdriver报错 is not clickable at point

这个报错一般是使用click()时,点击失败。 一般情况下,还会伴随报错: Other element would receive the click: 这种情况下,一般是页面加载后,需要点击的元素之前有其他元素,其他元素收到了点击动作&…

一文读懂Java多线程优点与代价

多线程的优点 多线程能给程序带来比较多的好处,粗略概括如下几点: 提高资源利用率提高程序响应性能简化程序设计提高资源利用率比较好理解,现代服务器都是多核CPU,单线程并不能充分发挥多核CPU的优势,要提高资源利用率,自然是充分利用CPU,那多线程就是最好的方式。一个…

手撕RPC——前言

手撕RPC——前言 一、RPC是什么?二、为什么会出现RPC三、RPC的原理3.1 RPC是如何做到透明化远程服务调用?3.2 如何实现传输消息的编解码? 一、RPC是什么? RPC(Remote Procedure Call,远程过程调用&#xff…

52、U-boot2023的移植教程

uboot:https://ftp.denx.de/pub/u-boot/ nxp-uboot:https://github.com/nxp-imx/uboot-imx 1、顶层Makefile 文件加入编译的两种方式:以xxx/xxx.c文件为例 1、使用menuconfig: 先编辑.c所在目录下的Kconfig&#xff0…

实验六:三维图形修改器的综合应用

如果文章有写的不准确或需要改进的地方,还请各位大佬不吝赐教💞💞💞。朱七在此先感谢大家了。😘😘😘 🏠个人主页:语雀个人知识库 🧑个人简介:大家…

20240623 每日AI必读资讯

🤖原生鸿蒙AI浓度要爆表了! - 一年一度华为开发者大会上,余承东首次揭秘“鸿蒙原生智能”Harmony Intelligence! - 华为小艺进化成系统级智能体。 - 一句话实现跨多个应用的规划和任务执行;在第三方APP上随意处理文…

啥移动硬盘格式能更好兼容Windows和Mac系统 NTFS格式苹果电脑不能修改 paragon ntfs for mac激活码

对于同时使用Windows和Mac操作系统的用户而言,选择一个既能确保数据互通又能满足大容量存储需求的移动硬盘格式尤为重要。下面我们来看看啥移动硬盘格式能更好兼容Windows和Mac系统,NTFS格式苹果电脑不能修改的相关内容。 一、啥移动硬盘格式能更好兼容…

简单了解html常用的标签

HTML 一、基础认知 1、注释 1.1、注释的作用和写法 1.1.1、作用 为代码添加解释性,描述性的信息,主要用来帮助开发人员理解代码,浏览器执行代码时回忽略所有注释。 1.1.2、注释的快捷键 在VS Code中:Ctrl / 2、HTML标签的…