몇 줄 의 Python 코드 가 3000+상장 회사 의 정 보 를 얻 었 습 니 다.
파충류 에 입문 하 는 것 은 매우 쉬 워 서 몇 줄 의 코드 만 있 으 면 된다.파 이 썬 을 배 우 는 가장 간단 한 방법 이 라 고 할 수 있다.
처음에 파충 류 를 쓰기 시 작 했 을 때 가장 핵심 적 인 부분 에 만 관심 을 가 져 야 한다.즉,먼저 데 이 터 를 성공 적 으로 잡 는 것 이다.다른 것 은 다운로드 속도,저장 방식,코드 게이지 이성 등 을 먼저 상관 하지 않 는 다.이런 코드 는 간단 하고 이해 하기 쉬 우 며 손 에 넣 기 쉬 우 며 자신 감 을 강화 할 수 있다.
기본 환경 설정
파 이 썬 3시스템:Windows관련 모듈:pandas,csv목표 사이트 에 오르다
구현 코드
import pandas as pdimport csvfor i in range(1,178): # tb = pd.read_html('http://s.askci.com/stock/a/?reportTime=2017-12-31&pageNum=%s' % (str(i)))[3] tb.to_csv(r'1.csv', mode='a', encoding='utf_8_sig', header=1, index=0)
3000+상장 회사 의 정보,엑셀 에 조용히 누 워 있 습 니 다.위의 자신 감 이 생 긴 후에 저 는 코드 를 계속 보완 하기 시 작 했 습 니 다.5 줄 코드 가 너무 얇 고 기능 도 너무 간단 하기 때문에 대체적으로 다음 과 같은 몇 가지 측면 에서 보완 되 었 습 니 다.
이상 처리 증가
백 페이지 가 넘 는 웹 페이지 를 오 르 면 중간 에 여러 가지 문제 로 인해 오 르 는 데 실패 할 수 있 기 때문에 try except,if 등 문 구 를 추가 하여 발생 할 수 있 는 이상 을 처리 하여 코드 를 더욱 튼튼 하 게 합 니 다.
코드 유연성 증가
초판 코드 는 URL 매개 변 수 를 고정 시 켰 기 때문에 고정된 내용 만 얻 을 수 있 습 니 다.그러나 사람의 생각 은 변화 가 많 습 니 다.이것 을 오 르 려 면 저것 이 필요 할 수도 있 습 니 다.그래서 URL 요청 매개 변 수 를 수정 하여 코드 의 유연성 을 증가 시 켜 더욱 유연 한 데 이 터 를 얻 을 수 있 습 니 다.
저장 방식 수정
초판 코드 는 엑셀 에 저장 하 는 가장 익숙 하고 간단 한 방식 을 선 택 했 습 니 다.사람 은 타성 동물 이기 때문에 자신의 편안 한 곳 을 떠 나 기 어렵 습 니 다.그러나 새로운 지식 을 배우 기 위해 저 는 데 이 터 를 MySQL 에 저장 하여 MySQL 의 사용 을 연습 하도록 하 겠 습 니 다.
기어 오 르 는 속 도 를 가속 화하 다.
초판 코드 는 가장 간단 한 단일 프로 세 스 기어 오 르 기 방식 을 사 용 했 고 기어 오 르 는 속도 가 느 리 며 웹 페이지 의 수량 이 비교적 많은 것 을 고려 하여 다 중 프로 세 스 를 위 한 기어 오 르 기 방식 을 수정 했다.
상기 몇 가지 보완 을 통 해 코드 량 은 원래 의 5 줄 에서 아래 의 몇 십 줄 로 증가 했다.
import requestsimport pandas as pdfrom bs4 import BeautifulSoupfrom lxml import etreeimport timeimport pymysqlfrom sqlalchemy import create_enginefrom urllib.parse import urlencode # URL start_time = time.time() # def get_one_page(i): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36' } paras = { 'reportTime': '2017-12-31', # , 2018-6-30 'pageNum': i # } url = 'http://s.askci.com/stock/a/?' + urlencode(paras) response = requests.get(url,headers = headers) if response.status_code == 200: return response.text return None except RequestException: print(' ')def parse_one_page(html): soup = BeautifulSoup(html,'lxml') content = soup.select('#myTable04')[0] #[0] list bs4 tbl = pd.read_html(content.prettify(),header = 0)[0] # prettify() ,[0] pd.read_html list DataFrame tbl.rename(columns = {' ':'serial_number', ' ':'stock_code', ' ':'stock_abbre', ' ':'company_name', ' ':'province', ' ':'city', ' (201712)':'main_bussiness_income', ' (201712)':'net_profit', ' ':'employees', ' ':'listing_date', ' ':'zhaogushu', ' ':'financial_report', ' ':'industry_classification', ' ':'industry_type', ' ':'main_business'},inplace = True) return tbldef generate_mysql(): conn = pymysql.connect( host='localhost', user='root', password='******', port=3306, charset = 'utf8', db = 'wade') cursor = conn.cursor() sql = 'CREATE TABLE IF NOT EXISTS listed_company (serial_number INT(20) NOT NULL,stock_code INT(20) ,stock_abbre VARCHAR(20) ,company_name VARCHAR(20) ,province VARCHAR(20) ,city VARCHAR(20) ,main_bussiness_income VARCHAR(20) ,net_profit VARCHAR(20) ,employees INT(20) ,listing_date DATETIME(0) ,zhaogushu VARCHAR(20) ,financial_report VARCHAR(20) , industry_classification VARCHAR(20) ,industry_type VARCHAR(100) ,main_business VARCHAR(200) ,PRIMARY KEY (serial_number))' cursor.execute(sql) conn.close()def write_to_sql(tbl, db = 'wade'): engine = create_engine('mysql+pymysql://root:******@localhost:3306/{0}?charset=utf8'.format(db)) try: tbl.to_sql('listed_company2',con = engine,if_exists='append',index=False) # append , except Exception as e: print(e)def main(page): generate_mysql() for i in range(1,page): html = get_one_page(i) tbl = parse_one_page(html) write_to_sql(tbl)# # if __name__ == '__main__': main(178) endtime = time.time()-start_time print(' %.2f ' %endtime)# from multiprocessing import Poolif __name__ == '__main__': pool = Pool(4) pool.map(main, [i for i in range(1,178)]) # 178 endtime = time.time()-start_time print(' %.2f ' %(time.time()-start_time))
결어이 과정 은 매우 자 연 스 럽 게 느껴 집 니 다.매번 수정 할 때마다 작은 점 을 겨냥 하여 조금씩 배우 고 이해 한 후에 추가 하기 때 문 입 니 다.만약 에 올 라 오 라 고 하면 이 몇 십 줄 의 코드 를 직접 쓰 면 포기 할 수 있 습 니 다.
그래서 입문 파충 류 는 방법 이 있 고 가장 중요 한 것 은 자신 감 을 주 는 것 임 을 알 수 있다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.