1. 程式人生 > >python 爬蟲爬取所有上市公司公告資訊(五)

python 爬蟲爬取所有上市公司公告資訊(五)

。,。現在我們進過for迴圈,已經獲取到了每一個股票程式碼在2015年至今所有的公告內容連線和公告日期,且是以(日期,公告內容url)元組的形式加入到了爬取佇列中,

在最內層迴圈結束後,我們編寫程式實現多執行緒和儲存公告內容的功能。

公告最終在對應的json檔案裡是以鍵值對的形式存在的,日期則是以後呼叫對應公告內容的鍵。

    model = {}
    while True:
        url = crawler.dequeue()
        if url is None:
           for t in threads:
               t.join()
               break
        else:
             while True:
               for t in threads:
                   if not t.is_alive():
                      threads.remove(t)
               if len(threads) >= maxthreads
                   time.sleep(CRAWL_DELAY)
                   continue
        try:
             t =threading.Thread(target = get_page_content,name=None,args =url,stock,model)
             threads.append(t)
             t.setDaemon(True)
             t.start()
             time.sleep(CRAWL_DELAY)
             break
        except:
             print("進入不了執行緒")

內層迴圈結束後,我們執行上面的程式。

首先定義了model字典來儲存資訊,然後開始while迴圈,從爬取佇列中取出url,首先檢視是否已經將佇列中的連線爬取完成,如果爬取完了則等待執行緒池中的執行緒執行完畢進入下一迴圈,如果佇列中還有url,則進入else語句塊,先移除佇列裡面已經完成的執行緒,然後判斷執行緒是否超過了我們設定的最大限制,如果執行緒池中執行緒已經到了我們設定的閥值,則等待時間,進入下一迴圈。如果沒有到達執行緒數量的閥值,則加入到執行緒池中,將url資訊,stock資訊,model,傳入到我們編寫的get_page_content函式中進行處理。

我們先明確get_page_content函式所要實現的功能。

1.抓取網頁的公告內容

2.將抓取到的公告內容與公告日期對應,儲存到model字典中

3.將get_page_content爬取過的網頁url雜湊化之後加入到download.txt檔案中

4.針對一天多個公告的情況,將公告中的內容加起來,對應一個日期。

5.根據前面設計的資料結構建立檔案

開始編寫程式碼

def get_page_content(url,stock,model):
        stock_page = etree.HTML(get_text(url[1]))
        notice = stock_page.xpath('//div[@class="detail-body"]/div[1]')[0].text

        path = '/home/gupiao/%s/%s'%(stock,url[0][:4])
        isExist = os.path.exists(path)
        
        if not isExist:
           os.makedirs(path)
           print(path+“建立成功”)
        
        if url[0] in model.keys():
           new_value = model[url[0]] + notice
           model[url[0]] = new_value
        else:
           model[url[0]] = notice
        
        mdurl = url[1].encode('utf8')
        new_md5 = hashlib.md5(mdurl).hexdigest()
        crawler.dumd5_file.write(new_md5+"\n")
這裡有兩個需要注意的地方,首先是對同一天多個公告的處理,筆者採用的方法是先判斷日期是否已經存在於model的鍵中,如果已經存在,證明已經爬取過當天的另外一條公告,我們定義new_notice 等於之前的公告加現在爬取的notice,將new_notice賦值給該日期。這樣呼叫該日期的公告內容時就能拿到當天釋出過的所有公告內容。

二是在爬取完成之後儲存時,注意要將url先編碼為utf8,否則無法雜湊化寫入到檔案中。

這段程式碼建立好了資料的資料夾結構,model中也儲存了該股票所有的日期和公告內容資訊。

我們接下來實現檔案按月份分類儲存為json檔案的功能收尾。

for talk_time in model.keys():
    with open('/home/gupiao/%s/%s/%s.json'%(stock,talk_time[:4],talk_time[:7]),'a',encoding='utf8') as json_file:
              infodict = {}
              infodice[talk_time] = model[talk_time]
              json.dump(infodict,json_file,ensure = Flase)
   print(stock+"完成")

這裡為了將不同月份的公告分開,筆者先定義了一個infodict字典,然後將每個公告日期遍歷,將相同日期的model值賦給infodict,將infodict寫入對應的json檔案。

爬蟲大致就完成了,筆者現在還在執行程式中,預計爬取完成後檔案有十幾個G的大小。

相關推薦

python 爬蟲所有上市公司公告資訊

。,。現在我們進過for迴圈,已經獲取到了每一個股票程式碼在2015年至今所有的公告內容連線和公告日期,且是以(日期,公告內容url)元組的形式加入到了爬取佇列中, 在最內層迴圈結束後,我們編寫程式實現多執行緒和儲存公告內容的功能。 公告最終在對應的json檔案裡是以鍵值對

python 爬蟲所有上市公司公告資訊

。,。前面我們已經瞭解了python中多執行緒,selenium,requests等爬蟲基本操作的知識,現在我們準備編寫一個規模較大的爬蟲,目的是爬取所有上市公司2015年至今的公告資訊。 相較於前面幾個簡單的爬蟲功能程式碼,公告資訊爬蟲需要考慮更多的問題,現在可以預見到的

python 爬蟲所有上市公司公告資訊

。,。設計公告資訊爬蟲面臨的主要問題在上一篇文章已經敘述過了,這篇文章我們選擇合適的資料來源和爬取的方式 首先選擇爬取的資料來源,這裡筆者經過多方比較,最終選擇了東方財富網作為公告爬蟲的資料來源。 下面以飛馬國際為例(002210) 我們可以看到,東方財富網專門設有網頁儲

利用Python爬蟲京東商品的簡要資訊

一、前言   本文適合有一定Python基礎的同學學習Python爬蟲,無基礎請點選:慕課網——Python入門   申明:例項的主體框架來自於慕課網——Python開發簡單爬蟲   語言:Python2   IDE:VScode二、何為爬蟲   傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的UR

Python爬蟲智聯招聘職位資訊

目的:輸入要爬取的職位名稱,五個意向城市,爬取智聯招聘上的該資訊,並列印進表格中 #coding:utf-8 import urllib2 import re import xlwt class ZLZP(object): def __init__(self

python爬蟲鏈家二手房資訊

一種有想做個爬蟲的想法,正好上個月有足夠的時間和精力就學了下scrapy,一個python開源爬蟲框架。好多事開始以為很難,但真正下定決心去做的時候,才發現非常簡單,scrapy我從0基礎到寫出第一個可用的爬蟲只用了兩天時間,從官網例項到我的demo,真是遇到一堆問題,通

Python爬蟲大資料崗位招聘資訊51job為例

簡單介紹一下爬蟲原理。並給出 51job網站完整的爬蟲方案。 爬蟲基礎知識 資料來源 網路爬蟲的資料一般都來自伺服器的響應結果,通常有html和json資料等,這兩種資料也是網路爬蟲的主要資料來源。 其中html資料是網頁的原始碼,通過瀏覽器-檢視原始碼可

【圖文詳解】scrapy爬蟲與動態頁面——拉勾網職位資訊1

5-14更新 注意:目前拉勾網換了json結構,之前是content - result 現在改成了content- positionResult - result,所以大家寫程式碼的時候要特別注意加上

【圖文詳解】scrapy爬蟲與動態頁面——拉勾網職位資訊2

上次挖了一個坑,今天終於填上了,還記得之前我們做的拉勾爬蟲嗎?那時我們實現了一頁的爬取,今天讓我們再接再厲,實現多頁爬取,順便實現職位和公司的關鍵詞搜尋功能。 之前的內容就不再介紹了,不熟悉的請一定要去看之前的文章,程式碼是在之前的基礎上修改的

爬蟲--csdn訊息並郵箱通知python3

之前有很多同學給我發訊息,諮詢相關問題,我都沒能及時回覆解答。 主要原因是工作比較忙,部落格沒有每天登入檢視訊息。等到開啟訊息,看一些同學的訊息,無奈都已經過去了多天。 所以這裡寫了個小指令碼,每天爬取部落格訊息通知,如果有新訊息,就傳送到個人郵箱提醒。

Python爬蟲之Beautiful Soup解析庫的使用

Python爬蟲之Beautiful Soup解析庫的使用 Beautiful Soup-介紹 Python第三方庫,用於從HTML或XML中提取資料官方:http://www.crummv.com/software/BeautifulSoup/ 安裝:pip install beautifulsoup4

Python 爬蟲從入門到進階之路

在之前的文章中我們帶入了 opener 方法,接下來我們看一下 opener 應用中的 ProxyHandler 處理器(代理設定)。 使用代理IP,這是爬蟲/反爬蟲的第二大招,通常也是最好用的。 很多網站會檢測某一段時間某個IP的訪問次數(通過流量統計,系統日誌等),如果訪問次數多的不像正常人,它會禁止

Python爬蟲CSDND首頁的所有的文章

  # -*- encoding: utf-8 -*- import re import urllib.request def function(): """Python爬蟲爬取CSDND首頁的所有的文章""" html="https://blog.csdn.n

python爬蟲 大眾點評中所有行政區內的商戶 將獲取資訊存於excle中

import xlwt ''' 爬取網頁時直接出現403,意思是沒有訪問許可權 ''' import requests from bs4 import BeautifulSoup #入口網頁 start_url = 'https://www.dianping.com/se

python爬蟲NBA貼吧的所有精品貼

首先用直接的方法寫,先嚐試下能否爬取成功 #coding:utf-8 import urllib2,urllib import re ''' 1.準備url地址 2.準備請求頭 3.建立請求物件 4.發起請求獲取第一頁原始碼,接收響應 5.通過第一頁原始碼,找到總頁數和標題

python爬蟲csdn部落格專家所有部落格內容

#coding:utf-8 import urllib2 from bs4 import BeautifulSoup import os import re #import sys #reload(sys) #sys.setdefaultencoding("utf-8") def getPage(hre

【附上解釋】A股所有上市公司資訊並存儲到資料庫或者是csv檔案中

輸入到mysql版 輸出會有警告,但是不影響。 附上了詳細的解釋~ import pandas as pd import requests import random from bs4 import BeautifulSoup import pymysql f

Python爬蟲從入門到放棄十八之 Scrapy所有知乎使用者資訊(上)

本文出自“python修行路”部落格,http://www.cnblogs.com/zhaof/p/7215617.html爬取的思路首先我們應該找到一個賬號,這個賬號被關注的人和關注的人都相對比較多的,就是下圖中金字塔頂端的人,然後通過爬取這個賬號的資訊後,再爬取他關注的人和被關注的人的賬號資訊,然後爬取被

Python爬蟲-糗事百科段子

hasattr com ima .net header rfi star reason images 閑來無事,學學python爬蟲。 在正式學爬蟲前,簡單學習了下HTML和CSS,了解了網頁的基本結構後,更加快速入門。 1.獲取糗事百科url http://www.qiu

python爬蟲頁面源碼在本頁面展示

一個 nts ring 想要 strip code 空白 列表 ngs python爬蟲在爬取網頁內容時,需要將內容連同內容格式一同爬取過來,然後在自己的web頁面中顯示,自己的web頁面為django框架 首先定義一個變量html,變量值為一段HTML代碼 >&