몇 줄 의 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))
결어
이 과정 은 매우 자 연 스 럽 게 느껴 집 니 다.매번 수정 할 때마다 작은 점 을 겨냥 하여 조금씩 배우 고 이해 한 후에 추가 하기 때 문 입 니 다.만약 에 올 라 오 라 고 하면 이 몇 십 줄 의 코드 를 직접 쓰 면 포기 할 수 있 습 니 다.
그래서 입문 파충 류 는 방법 이 있 고 가장 중요 한 것 은 자신 감 을 주 는 것 임 을 알 수 있다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기