欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

幾行Python代碼爬取3000+上市公司的信息

 更新時間:2019年01月24日 10:42:46   作者:Python新世界  
今天小編就為大家分享一篇關(guān)于幾行Python代碼爬取3000+上市公司的信息,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

前言

入門爬蟲很容易,幾行代碼就可以,可以說是學(xué)習(xí) Python 最簡單的途徑。

剛開始動手寫爬蟲,你只需要關(guān)注最核心的部分,也就是先成功抓到數(shù)據(jù),其他的諸如:下載速度、存儲方式、代碼條理性等先不管,這樣的代碼簡短易懂、容易上手,能夠增強(qiáng)信心。

基本環(huán)境配置

  • 版本:Python3
  • 系統(tǒng):Windows
  • 相關(guān)模塊:pandas、csv

爬取目標(biāo)網(wǎng)站

實現(xiàn)代碼

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+ 上市公司的信息,安安靜靜地躺在 Excel 中:

有了上面的信心后,我開始繼續(xù)完善代碼,因為 5 行代碼太單薄,功能也太簡單,大致從以下幾個方面進(jìn)行了完善:

增加異常處理

由于爬取上百頁的網(wǎng)頁,中途很可能由于各種問題導(dǎo)致爬取失敗,所以增加了 try except 、if 等語句,來處理可能出現(xiàn)的異常,讓代碼更健壯。

增加代碼靈活性

初版代碼由于固定了 URL 參數(shù),所以只能爬取固定的內(nèi)容,但是人的想法是多變的,一會兒想爬這個一會兒可能又需要那個,所以可以通過修改 URL 請求參數(shù),來增加代碼靈活性,從而爬取更靈活的數(shù)據(jù)。

修改存儲方式

初版代碼我選擇了存儲到 Excel 這種最為熟悉簡單的方式,人是一種惰性動物,很難離開自己的舒適區(qū)。但是為了學(xué)習(xí)新知識,所以我選擇將數(shù)據(jù)存儲到 MySQL 中,以便練習(xí) MySQL 的使用。

加快爬取速度

初版代碼使用了最簡單的單進(jìn)程爬取方式,爬取速度比較慢,考慮到網(wǎng)頁數(shù)量比較大,所以修改為了多進(jìn)程的爬取方式。

經(jīng)過以上這幾點的完善,代碼量從原先的 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()優(yōu)化代碼,[0]從pd.read_html返回的list中提取出DataFrame  tbl.rename(columns = {'序號':'serial_number', '股票代碼':'stock_code', '股票簡稱':'stock_abbre', '公司名稱':'company_name', '省份':'province', '城市':'city', '主營業(yè)務(wù)收入(201712)':'main_bussiness_income', '凈利潤(201712)':'net_profit', '員工人數(shù)':'employees', '上市日期':'listing_date', '招股書':'zhaogushu', '公司財報':'financial_report', '行業(yè)分類':'industry_classification', '產(chǎn)品類型':'industry_type', '主營業(yè)務(wù)':'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表示在原有表基礎(chǔ)上增加,但該表要有表頭  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)# # 單進(jìn)程if __name__ == '__main__':    main(178)  endtime = time.time()-start_time  print('程序運行了%.2f秒' %endtime)# 多進(jìn)程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))

結(jié)語

這個過程覺得很自然,因為每次修改都是針對一個小點,一點點去學(xué),搞懂后添加進(jìn)來,而如果讓你上來就直接寫出這幾十行的代碼,你很可能就放棄了。

所以,你可以看到,入門爬蟲是有套路的,最重要的是給自己信心。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • PyTorch預(yù)訓(xùn)練Bert模型的示例

    PyTorch預(yù)訓(xùn)練Bert模型的示例

    這篇文章主要介紹了PyTorch預(yù)訓(xùn)練Bert模型的示例,幫助大家更好的進(jìn)行機(jī)器學(xué)習(xí),訓(xùn)練模型,感興趣的朋友可以了解下
    2020-11-11
  • Python實現(xiàn)五子棋聯(lián)機(jī)對戰(zhàn)小游戲

    Python實現(xiàn)五子棋聯(lián)機(jī)對戰(zhàn)小游戲

    本文主要介紹了通過Python實現(xiàn)簡單的支持聯(lián)機(jī)對戰(zhàn)的游戲——支持局域網(wǎng)聯(lián)機(jī)對戰(zhàn)的五子棋小游戲。廢話不多說,快來跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • python中的accumulate()函數(shù)示例詳解

    python中的accumulate()函數(shù)示例詳解

    accumulate 函數(shù)是Python標(biāo)準(zhǔn)庫 itertools 模塊中的一個函數(shù),用于生成累積計算的結(jié)果,這篇文章主要介紹了python中的accumulate()函數(shù),需要的朋友可以參考下
    2023-09-09
  • Pygame改編飛機(jī)大戰(zhàn)制作兔子接月餅游戲

    Pygame改編飛機(jī)大戰(zhàn)制作兔子接月餅游戲

    一年中秋又快到了,今年加入了Python的學(xué)習(xí)行列,得益于Python的開發(fā)效率和易讀性,網(wǎng)上寫文章的次數(shù)多了起來,既然是中秋節(jié)那肯定要搞個應(yīng)景的游戲才行
    2022-09-09
  • python回調(diào)函數(shù)用法實例分析

    python回調(diào)函數(shù)用法實例分析

    這篇文章主要介紹了python回調(diào)函數(shù)用法,較為詳細(xì)的分析了常用的調(diào)用方式,并實例介紹了Python回調(diào)函數(shù)的使用技巧,需要的朋友可以參考下
    2015-05-05
  • python socket 超時設(shè)置 errno 10054

    python socket 超時設(shè)置 errno 10054

    這篇文章主要介紹了python 遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個現(xiàn)有的連接 socket 超時設(shè)置 errno 10054 ,需要的朋友可以參考下
    2014-07-07
  • selenium+python自動化測試之多窗口切換

    selenium+python自動化測試之多窗口切換

    這篇文章主要介紹了selenium+python自動化測試之多窗口切換,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • OpenCV半小時掌握基本操作之像素加減乘除&邏輯運算

    OpenCV半小時掌握基本操作之像素加減乘除&邏輯運算

    這篇文章主要介紹了OpenCV基本操作之像素加減乘除&邏輯運算,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Pytorch 定義MyDatasets實現(xiàn)多通道分別輸入不同數(shù)據(jù)方式

    Pytorch 定義MyDatasets實現(xiàn)多通道分別輸入不同數(shù)據(jù)方式

    今天小編就為大家分享一篇Pytorch 定義MyDatasets實現(xiàn)多通道分別輸入不同數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python進(jìn)程間通信Queue工作過程詳解

    python進(jìn)程間通信Queue工作過程詳解

    這篇文章主要介紹了python進(jìn)程間通信Queue工作過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論