一、准备工作

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号的数据删除,在上传。

上传的时候如果数据量少,可以一次上传。

如果数据量比较大,可以分批次上传。

selenium爬虫后上传数据库。的更多相关文章

  1. 关于php加密库加密数据上传数据库或解密出错的问题

    php加密拓展库随着php版本的更新,函数的使用方法有所改变,所以加密模式推荐使用ecb,其中加密算法19种,加密模式8种,通过这种方式加密后的数据上传数据库后提取出来进行解密会发现结果是乱码,我认为 ...

  2. web自动化之selenium(三)文件上传

    1.上传标签为input #若上传文件的标签为<input>可以直接定位标签,然后send_keys(文件路径)可以直接上传 2.利用第三方软件Autoit上传 1.下载Autoit:ht ...

  3. 简单的 Android 拍照并显示以及获取路径后上传

    简单的 Android 拍照并显示以及获取路径后上传 Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view) { destoryBimap ...

  4. 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器

    使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...

  5. C# 防止content-type修改后上传恶意文件

    以图片为例子.在上传图片的时候,使用Fiddler抓取 通过js判断文件类型是不安全的,所以通过后台来判断,代码如下: ) { HttpPostedFile file0 = Request.Files ...

  6. 将IMAGE转为PDF后上传

    using iTextSharp.text; using iTextSharp.text.pdf; /// <summary> /// 将IMAGE转为PDF后上传 /// </su ...

  7. mui开发app之cropper裁剪后上传头像的实现

    在大多数app项目中,都需要对用户头像的上传,之前做web开发的时候,我主要是通过input type=file的标签实现的,上传后,使用php对图片进行裁剪,这种方式比较传统简单. 此次app开发中 ...

  8. selenium+python-autoit文件上传

    前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工 ...

  9. selenium之 文件上传所有方法整理总结【转】

    本文转自:https://blog.csdn.net/huilan_same/article/details/52439546 文件上传是所有UI自动化测试都要面对的一个头疼问题,今天博主在这里给大家 ...

随机推荐

  1. javaScript高级3笔记2

    DOM0级事件 <img src = "../..."  onclick = "function()" />  // 处理事件 elment.onc ...

  2. Android源码开发利器——Java源码调试(基于4.1.2)

     原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038     调试Android Java源码 草帽的后花园——Neo 写在之前的 ...

  3. Js模块化开发--seajs和gruntJs

    1.Seajs库 解决开发中的冲突依赖等问题,提供代码可维护性. SeaJS 是由玉伯开发的一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块和css ...

  4. fanout(Publish/Subscribe)发布/订阅

    引言 它是一种通过广播方式发送消息的路由器,所有和exchange建立的绑定关系的队列都会接收到消息 不处理路由键,只需要简单的将队列绑定到交换机上 fanout交换机转发消息是最快的,它不需要做路由 ...

  5. CodeForces 707D Persistent Bookcase ——(巧妙的dfs)

    一个n*m的矩阵,有四种操作: 1.(i,j)处变1: 2.(i,j)处变0: 3.第i行的所有位置1,0反转: 4.回到第k次操作以后的状态: 问每次操作以后整个矩阵里面有多少个1. 其实不好处理的 ...

  6. HDU 5806 NanoApe Loves Sequence Ⅱ ——(尺取法)

    题意:给出一个序列,问能找出多少个连续的子序列,使得这个子序列中第k大的数字不小于m. 分析:这个子序列中只要大于等于m的个数大于等于k个即可.那么,我们可以用尺取法写,代码不难写,但是有些小细节需要 ...

  7. Oracle For Linux

    安装前检查 检查是否安装以下软件rpm -qa | grep **下面**软件包 安装包名称 是否安装 binutils-2.17.50.0.6 √ compat-libstdc++-33-3.2. ...

  8. 精讲JS逻辑运算符&&、||,位运算符|,&

    1.JS中的||符号: 运算方法: 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值. 只要“||”前面为true,不管“||”后面是true还是fals ...

  9. BitmapRegionDecoder

    Android加载大图——BitmapRegionDecoder(转)   BitmapRegionDecoder,从API10就引入了.如下图:   NPONRY0T35GE$13{254X8Z1. ...

  10. 取得远端相应Json并转化为Java对象一

    JDK:1.8.0_212 IDE:STS4(Spring Tool Suit4 Version: 4.3.2.RELEASE) 工程下载:https://files.cnblogs.com/file ...