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.根據前面設計的資料結構建立檔案
開始編寫程式碼
這裡有兩個需要注意的地方,首先是對同一天多個公告的處理,筆者採用的方法是先判斷日期是否已經存在於model的鍵中,如果已經存在,證明已經爬取過當天的另外一條公告,我們定義new_notice 等於之前的公告加現在爬取的notice,將new_notice賦值給該日期。這樣呼叫該日期的公告內容時就能拿到當天釋出過的所有公告內容。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")
二是在爬取完成之後儲存時,注意要將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代碼 >&