日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

5行Python就能爬取 3000+ 上市公司的信息?

發布時間:2024/9/15 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5行Python就能爬取 3000+ 上市公司的信息? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:蘇克?

源自:https://www.makcyun.top/web_scraping_withpython18.html

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

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

基本環境配置

  • 版本:Python3

  • 系統:Windows

  • 相關模塊:pandas、csv

爬取目標網站

實現代碼

import?pandas?as?pd import?csv for?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 中:

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

增加異常處理

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

增加代碼靈活性

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

修改存儲方式

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

加快爬取速度

初版代碼使用了最簡單的單進程爬取方式,爬取速度比較慢,考慮到網頁數量比較大,所以修改為了多進程的爬取方式。

經過以上這幾點的完善,代碼量從原先的 5 行增加到了下面的幾十行:

import?requests import?pandas?as?pd from?bs4?import?BeautifulSoup from?lxml?import?etree import?time import?pymysql from?sqlalchemy?import?create_engine from?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.textreturn?Noneexcept?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中提取出DataFrametbl.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_timeprint('程序運行了%.2f秒'?%endtime)#?多進程 from?multiprocessing?import?Pool if?__name__?==?'__main__':pool?=?Pool(4)pool.map(main,?[i?for?i?in?range(1,178)])??#共有178頁endtime?=?time.time()-start_timeprint('程序運行了%.2f秒'?%(time.time()-start_time))

結語

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

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

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對小編的支持。

由于微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:

(1)點擊頁面最上方“小詹學Python”,進入公眾號主頁。 (2)點擊右上角的小點點,在彈出頁面點擊“設為星標”,就可以啦。 感謝支持,比心。

總結

以上是生活随笔為你收集整理的5行Python就能爬取 3000+ 上市公司的信息?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。