첫째, 준비 작업
1.1 소프트웨어 설치
지정된 위치에 chromedriver.exe합니다 구글 브라우저를 설치, 파이썬을 설치합니다.
스크립트 폴더에. 경로의 내 측면은 다음과 같습니다 C : \ 사용자 \ 1 \ 의 AppData \ 로컬 \ 프로그램 \ 파이썬 \ Python37 \ 스크립트
1.2 사용 Python 라이브러리.
파이썬 라이브러리가 사용됩니다 시간, datetiem, 운영 체제, 셀레늄, 팬더, pymysql, 로깅, 트위스트
처리 용 pymysql. 자신의 패키지를 형성한다.
# 인코딩 :. UTF 8 가져 오기 pymysql.cursors의 클래스 mysqloperation (객체) : DEF __init__ (자체, 설정) : self.connection = pymysql.connect (= 호스트 설정 [ ' MYSQL_HOST ' , 포트 = 설정 [ ' MYSQL_PORT ' ] 사용자 = 설정 [ ' mysql_user가 ' ] # 직접 연결 pymysql가있다 passwd에 연결 풀 암호 접속된다 Passwd 파일 구성 = [ 'mysql_passwd ' , DB = 설정 [ ' mysql_db ' , 캐릭터 = ' UTF8 ' , cursorclass = pymysql.cursors.DictCursor ) DEF read_sql (자기, SQL) : 커서 등 self.connection.cursor ()를 사용해 : 커서. 실행 (SQL) 결과 = cursor.fetchall () 리턴 결과 제외시켰다 전자로 예외 : self.connection.rollback () # 回滚 인쇄 ( ' 事务失败' , E) 데프 insert_sql (자기, SQL) : 커서로 self.connection.cursor ()를 시도 : cursor.execute을 (SQL ) self.connection.commit () 를 제외하고 전자와 같은 예외 : self.connection.rollback () 인쇄 ( ' 事务失败' , E) 데프 update_sql (자기, SQL) : # sql_update = "업데이트 사용자가 설정 한 사용자 이름 = '% s'을 (를) ID = % d의 " : 커서 AS와 self.connection.cursor () 은 try : cursor.execute (SQL) # SQL 문을 같은 매개 변수를 전달하는 #이 제출 self.connection.commit ()를 제외하고는 예외로 E : # 오류 롤백 self.connection.rollback () DEF의 delect_sql (자체, SQL_DELETE) : self.connection.cursor (와) 커서로 : 은 try : cursor.execute (SQL_DELETE) # SQL 문을 같은 매개 변수를 전달하는 #이 제출 ) (self.connection.commit를 제외하고는 : E와 같은 예외 #을错误回滚 self.connection.rollback () 데프 read_one (자기, SQL) : 커서로 self.connection.cursor ()를 시도 : cursor.execute (SQL) 결과 = cursor.fetchone () 반환 결과 를 제외하고 전자 등의 예외 : self.connection.rollback () # 回滚 인쇄 ( ' 事务失败' , E) 데프 다시 연결 (자동) : 시도 : self.connection.ping () 제외 : self.connection ()
둘째, 코드를 작성
2.1 공통 코드
에서 셀레늄 수입 webdriver 에서 selenium.webdriver.chrome.options 가져 옵션 에서 selenium.webdriver.common.by의 수입 에 의해 에서 selenium.webdriver.support의 수입 EC로 expected_conditions 에서 selenium.webdriver.support.wait 수입 WebDriverWait 에서 selenium.webdriver.common .keys는 가져올 키 수입 시 수입 날짜 수입 OS의 수입 PD로 팬더 에서 SQLCONNECT의 수입MysqlOperation 수입 수학 # 配置浏览器 옵션 = 옵션 () download_path = R " E : \ splider \ PK " options.add_experimental_option ( " 의 환경 설정 " , { " download.default_directory " : download_path, " download.prompt_for_download " : 거짓, " 다운로드 .directory_upgrade " : 사실은, " safebrowsing.enabled " : 참 }) # 配置数据库 설정 = { 'mysql_host ': ' , ' MYSQL_PORT ' : ' mysql_user ' : ' , ' mysql_passwd ' : ' , ' mysql_db를 ' : ' } 의 MySQL = MysqlOperation (= 설정 구성) # 防错清空 file_list를 = os.listdir (download_path) 대한 파일 에 file_list를 : FILE_PATH = download_path + ' \\ '+ 파일 의 경우os.path.exists (FILE_PATH) : os.remove (FILE_PATH) 인쇄 ( ' #Cleared ' ) #이 백분율은 소수점으로 변환 된 DEF judge_percent (X) : IF isinstance (X, STR) : IF ' % ' 에서 : X 반환 라운드 (플로트 (X [-. 1]) / 100, 2 ) 다른 : 리턴 X 다른 : 리턴 X DEF 바꾸기 (download_path, START_TIME, END_TIME, 지방 = ' all_country ' ) : # 다운로드 파일 이름 바꾸기 번호 = 0 original_file_path = ' OLD_NAME ' rename_file_path = ' NEW_NAME ' 동안 되지 os.path.exists (original_file_path) 과 수 <5 : time.sleep ( 10 ) 수 = 번호 + 1 os.rename (original_file_path, rename_file_path) 인쇄 ( " 完成重命名" )
설명 :
구성 브라우저의 목적은 다운로드 경로를 변경하는 것입니다 download_path 사용자 정의 다운로드 경로입니다.
구성 데이터베이스는 데이터베이스에 연결하는 것입니다.
목적은 폴더 내부의 잘못 두려움 데이터가 다운로드 된 데이터를 방해 취소하는 것입니다. 이것은 내가 비워 모든, 당신은 비워 파일을 지정할 수 있습니다.
영어로 한자에 파일 이름 바꾸기를 다운로드 한 후.
2.2 셀레늄 시뮬레이션 다운로드합니다.
나는 위치가 XPATH이다 사용합니다.
= 브로 webdriver.Chrome (= 옵션 옵션) bro.implicitly_wait ( 10) # 암시 대기 10S time.sleep (10) #의 대기 10S
때때로 때문에 XPATH 부하 느린 속도와 다른 이유,의. 이 시간 그래서 우리는 기다릴 필요가있다.
bro.find_element_by_xpath = A ( '' ) a.click () a.clear () a.send_keys ( " 입력 " ) a.send_keys (Keys.ENTER) # 시뮬레이션은 엔터 키를 눌러
파충류는 때때로 텍스트를 입력해야 할 때. 그러나 그들이 입력을 클릭하거나 Enter 키를 눌러해야 할 단어를 입력합니다.
이것은 아날로그 조작 셀레늄를 입력해야합니다.
2.2 배 명명
다운로드가 같은 이름으로 수행 한 후.
2.3 조작 데이터베이스.
데이터를 다운로드 한 후. 데이터베이스에 데이터를 업로드해야합니다.
업로드하기 전에 제거해야합니다. 예를 들어, 다운로드 된 데이터는 데이터 번호 1-5입니다. 필요가 데이터베이스 1-5 삭제, 업로드의 데이터를 넣어 없습니다.
적은 시간이 데이터를 업로드하면 업로드 할 수 있습니다.
대량의 데이터를 업로드 배치 될 경우.