python爬取搜狗熱搜榜

python爬取搜狗熱搜榜

來自專欄 python入門

實驗室網太慢了,想關注一下實時熱點,又不想一個網頁一個網頁地載入,乾脆做個簡單的爬蟲,看看熱搜榜單。至於搜索引擎,就讓我們選擇知乎的合作夥伴——從未流行就早已過氣的搜狗吧。

一、庫的導入

首先依然是幾個爬蟲入門級別的庫:

import urllib.requestimport bs4from bs4 import BeautifulSoup as bsimport sysimport impimp.reload(sys)

下面兩個模塊與爬蟲無關,但是在本次程序中很重要:

from pylsy import pylsytable #用於在控制台列印表格import os#調整控制台尺寸,為了讓最終我們得到的表格能夠完整地顯示出來mode="mode con: cols=150 lines=40"os.system(mode)

二、爬取熱搜榜單

首先要初始化。搜狗熱搜榜有十個類別,我們找到感興趣的第1、2、3、8、10個,分別是熱點、電影、綜藝、遊戲人物,非常好記(中央組織部舉報電話12380)。因此我們需要五個列表來存儲,以及一個可以存儲子節點的列表,和一個用來計數的變數。

data=[]t1 = []t2 = []t3 = []t4 = []t5 = []c=0

接下來是爬虫部分的設置:

#設置URL和解析器,lxml解析器速度快、容錯強ret=urllib.request.urlopen(http://top.sogou.com/)soup=bs(ret.read(),lxml)

現在可以正式開始爬蟲了:

#通過標籤名來查找for i in soup.select(span): if i.contents: if i.get(class)[0]==num or i.get(class)[0]==hot-num: pass for i in soup.select(a): if i.get(href).find(query)>0 and type(i.contents[0]) is bs4.element.NavigableString: data.append(i.contents[0])for i in range(1,11): for value in data[1+10*c:(1+10*c)+10]: if i==1: t1.append(value) elif i==2: t2.append(value) elif i==3: t3.append(value) elif i==8: t4.append(value) elif i==10: t5.append(value) c+=1

類似的方法,我們也可以用來爬百度風雲榜。

三、以表格形式列印

title = ["Hot", "Movie", Show, Game, Person] #設置表頭table = pylsytable(title)#向table添加數據table.add_data(Hot,t1)table.add_data("Movie",t2)table.add_data("Show",t3)table.add_data("Game",t4)table.add_data("Person",t5)table._create_table()print(table)

四、結果分析

2018.5.16實時熱搜榜

搜狗的實時熱點不知道多久更新一次,其他榜單應該是每日更新。從電影榜來看,前十都沒有當前最火爆的復聯3,不知是搜狗有意屏蔽,還是真的沒人用搜狗,也有可能搜的人是想找資源,所以新片比較少。綜藝榜和遊戲榜還算勉強符合當下熱點,雖然有些也很莫名其妙。至於人物榜前二居然是胡冰卿和宋威龍,沒想到吧?(我還以為能有孟美岐呢)

從搜索結果可見,搜狗真的沒什麼人用,有時候我們甚至搞不清它的網址是sougou還是sogou。想起以前在一個小網站寫過網文,那個網站只被搜狗收錄了,百度都查不到,難怪我一直不火呀!真是白瞎了它適合寫段子的名字了呢:每當我找不到你的時候,就默默打開了搜狗。你曾經也用過搜狗嗎?

我,寫完;搜狗,打錢。

推薦閱讀:

在搜狗IPO敲鐘儀式上,為什麼王小川流淚了?
魏則西事件對中國搜索引擎行業產生了怎樣的影響?
搜狗搜索推薦的小鹿醫館可靠真實么?
哪種輸入法最好用?
哪些數據支撐搜狗估值30億美元?

TAG:搜狗 | python爬蟲 |