九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Python爬蟲實戰(zhàn):東方財富網(wǎng)股吧數(shù)據(jù)爬?。ㄒ唬?/div>

Python爬蟲實戰(zhàn)系列文章目錄

Python爬蟲實戰(zhàn):東方財富網(wǎng)股吧數(shù)據(jù)爬?。ㄒ唬?/a>
Python爬蟲實戰(zhàn):東方財富網(wǎng)股吧數(shù)據(jù)爬取(二)
Python爬蟲實戰(zhàn):東方財富網(wǎng)股吧數(shù)據(jù)爬取(三)
Python爬蟲實戰(zhàn):東方財富網(wǎng)股吧數(shù)據(jù)爬?。ㄋ模?/a>


前言

朋友托我寫個爬蟲,本身是個爬蟲小白的我還是接受了此次重任,總共歷時五天左右,過程中遇到過無數(shù)bug,好在一路披荊斬棘,還是大差不差的完成了此次委托!但感覺這次的經(jīng)歷還是有必要和大家分享一下,正好最近也沒有寫博文了,趁這次機會趕趕進度!

一、項目說明

項目需求:股吧中人們的言論行為和股市漲跌的延遲相關(guān)性
數(shù)據(jù)來源:
東方財富網(wǎng)熱門個股吧
數(shù)據(jù)字段:閱讀、評論、標題、作者、更新時間
實現(xiàn)功能:讀取每個公司股吧的全部頁面的數(shù)據(jù)并寫入excel表中

二、實施過程

東方財富吧為例

1.明確獲取網(wǎng)頁中哪些數(shù)據(jù)

我們需要爬取的是東方財富吧中全部發(fā)帖信息的閱讀、評論、標題、作者最后更新時間這五個字段的數(shù)據(jù),我一開始想也不是很難,解析一下網(wǎng)頁匹配一下對應(yīng)的標簽值就可以了,但后面還是出現(xiàn)了各種各樣的問題,需要大家注意一下。


2.查看網(wǎng)頁源代碼分析結(jié)構(gòu)

① 網(wǎng)頁源代碼

首先打開網(wǎng)頁的開發(fā)者工具(Ctrl+Shift+i),在源代碼中查找對應(yīng)字段的標簽結(jié)構(gòu)。


從圖中可以看出,這五個字段分別位于<span></span>行標簽內(nèi),對應(yīng)的屬性分別是"l1 a1"、"l2 a2"、"l3 a3"、"l4 a4"、"l5 a5"。想必大家已經(jīng)有思路了,我們可以通過先獲取網(wǎng)頁代碼,再解析網(wǎng)頁查詢對應(yīng)的五個字段,最后做一個提取就可以了。

② 網(wǎng)頁鏈接

【東方財富吧:300059】
首頁:https://guba.eastmoney.com/list,300059.html
第二頁:https://guba.eastmoney.com/list,300059_2.html
可以看出個股吧鏈接主要由三部分組成:list、名稱代碼、頁數(shù)

I.全部個股吧的數(shù)字代碼


II. 翻頁數(shù)據(jù)

如何得到不同股吧的所有翻頁數(shù)據(jù),著實讓我找了好久,各種資源我都找了可惜還是沒有發(fā)現(xiàn),突然無意之中我找到了解決辦法,我直接一個好家伙!

跟上述的五類字段一樣,我們查看一下頁數(shù)的代碼字段,如下圖所示:


我的第一個辦法是直接解析網(wǎng)頁后找到<span></span>標簽下的sumpage屬性,其內(nèi)容即為總頁數(shù),本來以為原來這么好獲取,結(jié)果解析完才發(fā)現(xiàn),pagernums里的內(nèi)容是動態(tài)的,即span.on是會隨頁而變化的,故直接requests并不能獲取到,但是還是被我發(fā)現(xiàn)了玄機!

大家可以看data-pager這里,里面的內(nèi)容是list,300059_|452885|80|2,我對比了幾個頁面后發(fā)現(xiàn)其中數(shù)字分別代表的是:

300059:股吧數(shù)字代碼452885:該股吧共發(fā)帖452885條 
80:每個頁面分別有80條貼子 
2:當前所處頁面為第2頁

那么這時候,我們就可以直接用累積多年的算力(小學除法)算出東方財富吧共有452885/80=5661.0625,向上取整共5662頁!如果你也脫口而出好家伙的話,請在屏幕下方打出來!


3.爬蟲需要具備的功能

基本問題解決了,我們可以開始編寫爬蟲了。這部分不講代碼原理,只解釋代碼功能。自己也是小白,如果代碼存在問題或不清楚的話,歡迎大家在下方留言,我一定及時回復(fù)。

① 獲取網(wǎng)頁源代碼

def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print("獲取網(wǎng)頁內(nèi)容失??!")

② 解析網(wǎng)頁并提取數(shù)據(jù)字段

def parsePage(html):list = [] # 我用的二維數(shù)組存儲read = []comment  = []title  = []author  = []time  = []try:# print(html)soup = BeautifulSoup(html, "html.parser")for each in soup.find_all('span', 'l1 a1'):if '萬' in each.string:each.string = each.string[:-2]read.append(each.string)read = read[1:] # read[0] == '閱讀'list.append(read)for each in soup.find_all('span', 'l2 a2'):comment.append(each.string)comment = comment[1:]  # comment[0] == '評論'list.append(comment)for each in soup.find_all('span', 'l3 a3'):first = each.select('a:nth-of-type(1)')for i in first:i.find_all("a")# print(i.title)title.append(i.title)list.append(title)for each in soup.find_all('span', 'l4 a4'):first = each.select('font:nth-of-type(1)')for i in first:i.find_all("font")# print(i.title)author.append(i.title)list.append(author)for each in soup.find_all('span', 'l5 a5'):time.append(each.string)time = time[1:] # time[0] == '最后更新'list.append(time)except:print("解析網(wǎng)頁字段失??!")return list

③ 獲取貼吧總頁數(shù)

基于解析的網(wǎng)頁直接find_all也是可以的
def get_total_pages_num(url):try:chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')chrome_options.add_argument('lang=zh_CN.UTF-8')chrome_options.add_argument('User-Agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"')chrome_options.add_argument('--disable-extensions')chrome_options.add_argument('--disable-gpu')chrome_options.add_argument('--no-sandbox')driver = webdriver.Chrome(options=chrome_options)driver.get(url)page_data = driver.find_element_by_xpath('//div[@id="mainbody"]/div[@id="articlelistnew"]/div[@class="pager"]/span[@class="pagernums"]').get_attribute('data-pager')# print(page_data)if page_data:# page_nums = re.findall('\|(\d+)', page_data[0])page_nums = page_data.split("|")# print(page_nums)total_pages = math.ceil(int(page_nums[1]) / int(page_nums[2]))driver.quit()except Exception as e:total_pages = 1return int(total_pages)

4.爬取結(jié)果

上述代碼基本的字段已經(jīng)可以實現(xiàn)爬取了,結(jié)果如下:


可以看到,我這里的時間多了年份,這是由于朋友研究的需要,在基于一次爬取的結(jié)果上,進行二次爬取標題所帶的鏈接網(wǎng)頁獲得的,有關(guān)二次爬取的內(nèi)容,我們再下一節(jié)再和大家分享。


總結(jié)

在爬取過程中,我還遇到了很多問題諸如:
① 部分帖子結(jié)構(gòu)不同或存在冗余該如何處理(問董秘等鏈接)
② 爬取過程中ip被屏蔽自動跳轉(zhuǎn)頁面該如何處理(代理IP池)
… …
這些內(nèi)容在后續(xù)章節(jié)中再和大家分享,下期再見啦!

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服