Python網絡爬蟲-爬取微博熱搜


微博熱搜的爬取較為簡單,我只是用了lxml和requests兩個庫

  url=https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6

 1.分析網頁的源代碼:右鍵--查看網頁源代碼.

             

 

     從網頁代碼中可以獲取到信息

            (1)熱搜的名字都在<td class="td-02">的子節點<a>里

            (2)熱搜的排名都在<td class=td-01 ranktop>的里(注意置頂微博是沒有排名的!)

            (3)熱搜的訪問量都在<td class="td-02">的子節點<span>里

  2.requests獲取網頁

  (1)先設置url地址,然后模擬瀏覽器(這一步可以不用)防止被認出是爬蟲程序。

###網址
url="https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6"
###模擬瀏覽器,這個請求頭windows下都能用
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

  (2)利用requests庫的get()和lxml的etree()來獲取網頁代碼

###獲取html頁面
    html=etree.HTML(requests.get(url,headers=header).text)

  3.構造xpath路徑 

  上面第一步中三個xath路徑分別是:

affair=html.xpath('//td[@class="td-02"]/a/text()')
rank=html.xpath('//td[@class="td-01 ranktop"]/text()')
view=html.xpath('//td[@class="td-02"]/span/text()')
  xpath的返回結果是列表,所以affair、rank、view都是字符串列表
  4.格式化輸出
  需要注意的是affair中多了一個置頂熱搜,我們先將他分離出來。
top=affair[0]
affair=affair[1:]

    這里利用了python的切片。

 print('{0:<10}\t{1:<40}'.format("top",top))
    for i in range(0, len(affair)):
        print("{0:<10}\t{1:{3}<30}\t{2:{3}>20}".format(rank[i],affair[i],view[i],chr(12288)))

 

這里還是沒能做到完全對齊。。。

 5.全部代碼 
###導入模塊
import requests
from lxml import etree

###網址
url="https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6"
###模擬瀏覽器
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

###主函數
def main():
    ###獲取html頁面
    html=etree.HTML(requests.get(url,headers=header).text)
    rank=html.xpath('//td[@class="td-01 ranktop"]/text()')
    affair=html.xpath('//td[@class="td-02"]/a/text()')
    view = html.xpath('//td[@class="td-02"]/span/text()')
    top=affair[0]
    affair=affair[1:]
    print('{0:<10}\t{1:<40}'.format("top",top))
    for i in range(0, len(affair)):
        print("{0:<10}\t{1:{3}<30}\t{2:{3}>20}".format(rank[i],affair[i],view[i],chr(12288)))
main()

結果展示:

 
        

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM