selenium爬虫后上传数据库。
时间:2019-11-16
本文章向大家介绍selenium爬虫后上传数据库。,主要包括selenium爬虫后上传数据库。使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、准备工作
1.1安装软件
安装python、安装谷歌浏览器、将chromedriver.exe放到指定位置。
放到Scripts文件夹中。我这边的路径为:C:\Users\1\AppData\Local\Programs\Python\Python37\Scripts
1.2用到的python库。
用到的python的库有:time,datetiem,os,selenium,pandas,pymysql,logging,twisted
将pymysql进行处理。形成一个自己的包。
# encoding:utf-8 import pymysql.cursors class MysqlOperation(object): def __init__(self, config): self.connection = pymysql.connect(host=config['mysql_host'], port=config['mysql_port'], user=config['mysql_user'], # pymysql直接连接是passwd,用连接池连接是password passwd=config['mysql_passwd'], db=config['mysql_db'], charset='utf8', cursorclass=pymysql.cursors.DictCursor ) def read_sql(self, sql): with self.connection.cursor() as cursor: try: cursor.execute(sql) result = cursor.fetchall() return result except Exception as e: self.connection.rollback() # 回滚 print('事务失败', e) def insert_sql(self, sql): with self.connection.cursor() as cursor: try: cursor.execute(sql) self.connection.commit() except Exception as e: self.connection.rollback() print('事务失败', e) def update_sql(self, sql): # sql_update ="update user set username = '%s' where id = %d" with self.connection.cursor() as cursor: try: cursor.execute(sql) # 像sql语句传递参数 # 提交 self.connection.commit() except Exception as e: # 错误回滚 self.connection.rollback() def delect_sql(self, sql_delete): with self.connection.cursor() as cursor: try: cursor.execute(sql_delete) # 像sql语句传递参数 # 提交 self.connection.commit() except Exception as e: # 错误回滚 self.connection.rollback() def read_one(self, sql): with self.connection.cursor() as cursor: try: cursor.execute(sql) result = cursor.fetchone() return result except Exception as e: self.connection.rollback() # 回滚 print('事务失败', e) def reConnect(self): try: self.connection.ping() except: self.connection()
二、书写代码
2.1通用代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.keys import Keys import time import datetime import os import pandas as pd from sqlConnect import MysqlOperation import math # 配置浏览器 options = Options() download_path = r"E:\splider\pk" options.add_experimental_option("prefs", { "download.default_directory": download_path, "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True }) # 配置数据库 config = {'mysql_host': '', 'mysql_port': , 'mysql_user': '', 'mysql_passwd': '', 'mysql_db': '' } mysql=MysqlOperation(config=config) # 防错清空 file_list = os.listdir(download_path) for file in file_list: file_path = download_path + '\\' + file if os.path.exists(file_path): os.remove(file_path) print('#Cleared') # 将百分数转化为小数 def judge_percent(x): if isinstance(x, str): if '%' in x: return round(float(x[:-1]) / 100, 2) else: return x else: return x def rename(download_path, start_time, end_time, province='all_country'): # 下载文件重命名 number = 0 original_file_path = 'old_name' rename_file_path = 'new_name' while not os.path.exists(original_file_path) and number < 5: time.sleep(10) number = number + 1 os.rename(original_file_path, rename_file_path) print("完成重命名")
说明:
配置浏览器的目的是更改下载路径:download_path便是自定义的下载路径。
配置数据库的是为了连接数据库。
放错清空的目的是担心文件夹里面的数据对下载的数据形成干扰。我这是全部清空,也可以指定文件清空。
下载之后的文件进行重命名,是为了将汉字转化为英文。
2.2 selenium模拟下载。
我用的的定位是XPATH。
bro = webdriver.Chrome(options=options) bro.implicitly_wait(10) # 隐式等待10s time.sleep(10) # 等待10s
有时因为网速等原因,XPATH加载较慢。所以这时候就需要等待。
a = bro.find_element_by_xpath('') a.click() a.clear() a.send_keys('输入文字') a.send_keys(Keys.ENTER) # 模拟按下enter键
爬虫的时候有时需要填入文字。但是填入文字之后又需要点击或者按enter。
这是需要用selenium模拟enter操作。
2.2重命名
下载之后用进行重名。
2.3操作数据库。
下载数据之后。需要将数据上传到数据库。
上传之前,记得删除。比如,下载的数据是1-5号的数据。需要先把数据库中1-5号的数据删除,在上传。
上传的时候如果数据量少,可以一次上传。
如果数据量比较大,可以分批次上传。
原文地址:https://www.cnblogs.com/qianslup/p/11805514.html
- Go语言Goroutine与Channel内存模型
- Tarjan--LCA算法的个人理解即模板
- spark sql编程之实现合并Parquet格式的DataFrame的schema
- Oracle压缩黑科技(一)—基础表压缩
- 12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践
- hdu----(4545)魔法串(LCS)
- Oracle压缩黑科技(二)—压缩数据的修改
- 在Pivotal Web Service上发布Spring Boot应用
- hdu---(1325)Is It A Tree?(并查集)
- spark2 sql编程样例:sql操作
- hdu----(1599)最大子矩阵(几何/dp)
- Go语言简单的TCP编程
- hdu---(1054)Strategic Game(最小覆盖边)
- Swagger Starter 1.4.0发布:新增swagger功能开源与全局参数的配置。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringBoot源码学习(三)
- Axure RP 9 安装与中文汉化
- Linux 离线安装docker的过程
- Mac环境变量设置(以ADB为例)
- Linux 基础之定时任务
- Git库迁移步骤(从服务器A迁移至服务器B)
- springboot源码解析(四)
- 第2天:网易2018年校园招聘NLP算法工程师笔试试卷分析(二)
- Windows下Scoop安装、配置与使用
- Flutter免费iOS真机调试 AndroidStudio iPhone真机运行教程
- Flutter GridView 网格控件
- Flutter ListView 下拉刷新,上拉加载更多
- Flutter问题:import 'package:english_words/english_words.dart'失败
- 第17天:NLP实战(一)——爬取语料及其简单分析
- 搞懂 Redis 缓存穿透、击穿、雪崩