爬取網易新聞排行榜

来源:https://www.cnblogs.com/qy1234/archive/2018/08/11/9461637.html
-Advertisement-
Play Games

解析一:檢測是否有這個文件目錄,不存在的話,會自動創建 解析二:os.mkdir 與 os.makedirs 區別及用法: (1)mkdir( path [,mode] ) 作用:創建一個目錄,可以是相對或者絕對路徑,mode的預設模式是0777。 如果目錄有多級,則創建最後一級。如果最後一級目錄的 ...


 

#網路爬蟲之最基本的爬蟲:爬取[網易新聞排行榜](http://news.163.com/rank/)

**一些說明:**

* 使用urllib2或requests包來爬取頁面。

* 使用正則表達式分析一級頁面,使用Xpath來分析二級頁面。

* 將得到的標題和鏈接,保存為本地文件。
import os
import sys
import requests
import re

from lxml import etree


def StringListSave(save_path, filename, slist):
    # 檢測是否有這個文件目錄,不存在的話,會自動創建
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    path = save_path+"/"+filename+".txt"
    with open(path, "w+") as fp:
        for s in slist:
            # 做了utf8轉碼,轉為終端可識別的碼制
            fp.write("%s\t\t%s\n" % (s[0].encode("utf8").decode('utf-8'), s[1].encode("utf8").decode('utf-8')))


def Page_Info(myPage):
    '''Regex'''
    # 這裡的re.findall 返回的是一個元組列表,內容是 (.*?) 中匹配到的內容
    # 析取每個鏈接的標題和鏈接
    mypage_Info = re.findall(r'<div class="titleBar" id=".*?"><h2>(.*?)'
                             r'</h2><div class="more"><a href="(.*?)">.*?</a></div></div>', myPage, re.S)
    return mypage_Info

def New_Page_Info(new_page):
    '''Regex(slowly) or Xpath(fast)'''
    # 將new_page的內容轉為html格式的樹
    dom = etree.HTML(new_page)
    # 析取 <tr <td <a中的文本
    new_items = dom.xpath('//tr/td/a/text()')
    # 析取 <tr <td <a中的鏈接, @href 是一個屬性
    new_urls = dom.xpath('//tr/td/a/@href')
    assert(len(new_items) == len(new_urls))
    return zip(new_items, new_urls)

def Spider(url):
    i = 0
    print("downloading ", url)
    myPage = requests.get(url).content.decode("gbk")
    myPageResults = Page_Info(myPage)
    save_path = "網易新聞抓取"
    filename = str(i)+"_"+"新聞排行榜"
    StringListSave(save_path, filename, myPageResults)
    i += 1
    for item, url in myPageResults:
        print("downloading ", url)
        new_page = requests.get(url).content.decode("gbk")
        newPageResults = New_Page_Info(new_page)
        filename = str(i)+"_"+item
        StringListSave(save_path, filename, newPageResults)
        i += 1


if __name__ == '__main__':
    print("start")
    start_url = "http://news.163.com/rank/"
    Spider(start_url)
    print("end")

 

解析一:檢測是否有這個文件目錄,不存在的話,會自動創建

import os
save_path = "網易新聞抓取"
if not os.path.exists(save_path):
   os.makedirs(save_path)

 

解析二:os.mkdir 與 os.makedirs 區別及用法:

1)mkdir( path [,mode] )

      作用:創建一個目錄,可以是相對或者絕對路徑,mode的預設模式是0777。
      如果目錄有多級,則創建最後一級。如果最後一級目錄的上級目錄有不存在的,則會拋出一個OSError。

(2)makedirs( path [,mode] )

      作用: 創建遞歸的目錄樹,可以是相對或者絕對路徑。
      如果子目錄創建失敗或者已經存在,會拋出一個OSError的異常,Windows上Error      183即為目錄已經存在的異常錯誤。如果path只有一級,與mkdir一樣。

     總結:os.mkdir()創建路徑中的最後一級目錄;os.makedirs()創建多層目錄。

 

解析三:文件操作,with open as追加文本內容實例:

(1) 最常見的讀寫操作

import re
with open('/rr.txt', 'w') as f:
   f.write('hello world')

如圖所示:

 

追加寫入文件內容:

import re
with open('/rr.txt', 'a') as f:
    f.write('hello world\n')
    # print(f.readline(1))

如圖所示:

 

(2) 一些正則表達式的關鍵詞

 

w:以寫方式打開,

a:以追加模式打開 (從 EOF 開始, 必要時創建新文件)

r+:以讀寫模式打開

w+:以讀寫模式打開 (參見 w )

a+:以讀寫模式打開 (參見 a )

rb:以二進位讀模式打開

wb:以二進位寫模式打開 (參見 w )

ab:以二進位追加模式打開 (參見 a )

rb+:以二進位讀寫模式打開 (參見 r+ )

wb+:以二進位讀寫模式打開 (參見 w+ )

ab+:以二進位讀寫模式打開 (參見 a+ )fp.read([size])                    

 

解析四:python格式化輸出

%s\t\t%s\n

解: %s:字元串; \n:換行; \t: 橫向製表符

 

 

1、  列印字元串

 

2、列印整數

 

3、列印浮點數

 

 

4、列印浮點數(指定保留小數點位數)

 

 

5、指定占位符寬度

 

 

 

6、指定占位符寬度,指定對其方式

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、關於享元模式 享元模式有點類似於單例模式,都是只生成一個對象被共用使用。享元模式主要目的就是讓多個對象實現共用,減少不會要額記憶體消耗,將多個對同一對象的訪問集中起來,不必為每個訪問者創建一個單獨的對象,以此來降低記憶體的消耗。 2、享元模式結構圖 因為享元模式結構比較複雜,一般結合工廠模式一起使用 ...
  • 詳細內容請參考廖雪峰官網,此處只是一些摘抄,心得與練習的coding。 Python內建的filter()函數用於過濾序列。 和map()類似(可參考 Python 高階函數 -- map/reduce),filter()也接收一個函數和一個序列。和map()不同的是,filter()把傳入的函數依 ...
  • 沒看清要求,提交錯誤一次。 要求是 "如果反轉後的整數溢出,則返回 0"。 ...
  • 給定一個排序鏈表,刪除所有重覆的元素,使得每個元素只出現一次。 示例 1: 輸入: 1->1->2 輸出: 1->2 示例 2: 輸入: 1->1->2->3->3 輸出: 1->2->3 /** * Definition for singly-linked list. * struct ListN ...
  • 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 註意:給定 n 是一個正整數。 示例 1: 輸入: 2 輸出: 2 解釋: 有兩種方法可以爬到樓頂。 1. 1 階 + 1 階 2. 2 階 示例 2: 輸入: 3 輸出: 3 解 ...
  • 一、c3p0連接池 1.導包(lib 下) 資料庫連接池 c3p0-0.9.5.2.jar machange-commons-java-0.2.11.jar MySQL驅動 mysql-connector-java-8.0.11.jar 2.核心方法 // 核心連接池類 ComboPooledDat ...
  • 實現多個線程順序執行的兩種方式 ...
  • 實現 int sqrt(int x) 函數。 計算並返回 x 的平方根,其中 x 是非負整數。 由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。 示例 1: 輸入: 4 輸出: 2 示例 2: 輸入: 8 輸出: 2 說明: 8 的平方根是 2.82842..., 由於返回類型是整數,小 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...