python爬取微博热搜榜
python爬取微博熱搜榜
最近應我大學室友得需求,做了一個簡單的爬蟲案例,先給大家看一下程序運行效果
接下來就是貼出代碼了,在這里我會做一些簡單說明,對如剛入門的同學可能會有所幫助,這里使用的是python3
需要引入的包,這兩個包可能需要自行下載
urllib lxml代碼
import urllib.request #導入urllib.request庫 import urllib.parse from lxml import etree#b = str(input("請輸入:")) #提示用戶輸入信息,并強制類型轉換為字符串型def weibo() :url = 'https://s.weibo.com/top/summary?'a = urllib.request.urlopen(url) #打開指定網址html = a.read() #讀取網頁源碼html = html.decode("utf-8") #解碼為unicode碼# print(html) #打印網頁源碼tree = etree.HTML(html)list = tree.xpath(u'//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[@class="td-02"]')prefix = 'https://s.weibo.com' # 微博域名weiboSummary = open("微博熱搜.txt", 'w') #打開并寫入文件for index,item in enumerate(list):if index > 0:a_element = item.xpath('.//a')[0]title = a_element.text # 關鍵詞href = urllib.parse.unquote(a_element.attrib.get('href')) # 鏈接href = href.replace("#", "%23") #此處是對鏈接中的#號做一個編碼轉換,否則無法跳轉指定關鍵詞鏈接hot = item.xpath('./span')[0].text #熱度指數line = str(index) + "\t" + title + "\t" + hot + "\t" + prefix + href + "\n"print(line.replace("\n", ""))if href.find("javascript:void(0)") != -1:line = str(index) + "\t" + title + "\t" + hot#寫入文件weiboSummary.write(line)else:title = '排名\t關鍵詞\t熱度\t鏈接\n'print(title.replace("\n",""))weiboSummary.write(title)weiboSummary.close()#調用方法 weibo();遇到的問題
1).這是本文中關于lxml的一些簡單用法
代碼中的 etree.HTML(html)是獲取頁面源碼對象
獲取到節點對象以后可以使用 xpath()來獲取元素內容,此處可以使用下圖中的方法,注意:該方法類似于JQuery的類選擇器,如果按xpath('//a')這種寫法,獲取的是頁面中所有的a標簽。
u代表的是編碼方式
element = tree.xpath(u'//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[@class="td-02"]')
element.text獲取的是當前對象標簽中的文本
屬性的話我們可以通過element.attrib.get('標簽中的屬性名')這種方式獲取標簽屬性的內容
詳細的lxml文檔操作可以自行百度
2). 關于IO
我在使用python的IO操作時候遇到一些問題
具體的錯誤原因我還尚不明確,不過導致報錯的原因是因為我導入了 IO 的包,python中本身帶有IO操作的相關API
我們只需要直接調用就可以
例如:open('weibo.txt', 'w') 不需要使用 os.open('weibo.txt')使用完之后要記得關閉資源
此處感謝:https://blog.csdn.net/lyandgh/article/details/81013897
總結
以上是生活随笔為你收集整理的python爬取微博热搜榜的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爱奇艺千亿级数据查询服务实践
- 下一篇: python中的slice用法