零基礎入門python爬蟲(一)

来源:https://www.cnblogs.com/g00gle/archive/2020/02/11/12297292.html
-Advertisement-
Play Games

✍寫在前面 : 歡迎加入純乾貨技術交流群Disaster Army:317784952 接到5月25日之前要交稿的任務我就一門心思想寫一篇爬蟲入門的文章,可是我並不會。還好有將近一個月的時間去學習,於是我每天鑽在書和視頻教程里。其實並不難的,我只是想做到能夠很好的理解它並用自己的語言較好的表達出來, ...


1

✍寫在前面

歡迎加入純乾貨技術交流群Disaster Army:317784952

接到5月25日之前要交稿的任務我就一門心思想寫一篇爬蟲入門的文章,可是我並不會。還好有將近一個月的時間去學習,於是我每天鑽在書和視頻教程里。其實並不難的,我只是想做到能夠很好的理解它並用自己的語言較好的表達出來,也許你將看到的是史上最不專業的技術交流文章,沒錯這就是我想要的。我力求能讓沒有編程基礎同我一樣愛黑客技術卻苦於看不到出路的同學們在24小時之內明白爬蟲是怎麼一回事。我想這才是我加入中國紅客聯盟太極實驗室在紅客精神的號召下做的有意義的事。學習技術一定要學會付出、開源、共用、互助,很多大牛似乎不願意這麼做了,我們入門小菜鳥只要夠團結,樂於奉獻就一定可以達到1+1>2的雙贏效果。總之共同努力吧!

☝第一章

0x00 python的認識、安裝

官面上的話自行去百度,這裡我只介紹我所掌握到的、最重要的信息。

特點:

(1)跨平臺開發

(2)以語法簡潔清晰著稱

(3)縮進控制嚴格

至於說爬蟲需不需要編程基礎,不用多說,君不見本屌在這個月之前的n多個月里是多麼苦苦的啃教程,對麽下三賴的求指點。其實自學的進步速度太慢了,此文也希望看到的碼闊多多提點!

更多信息:

python百度百科

安裝也是極易的,只是有python2.7和python3需要糾結選一下。菜菜也不多做建議了,各有所長,python是任性的,不顧及老用戶感受強行不相容更代,足以見得其魄力和自信。2.7的用戶較多一點,初學者想用大神的exp不得已會選擇它,3的用戶逐日增加,人家既然更代自然有好的原因。不必擔心,到最後基本上差異在哪裡都會知道的。

Python官網

還是那句話,官面上可以查到的就不多聊,交流文章多寫作者的看法,意見不統一的噴過來就是。很多教程會建議一開始的時候用python自帶的IDLE寫代碼,簡潔沒有代碼補全提示,適合初學者!我差點就信了!你會覺得怎麼打都有一種好TM業餘的感覺有沒有?我的觀點是:不是武功練到什麼程度用什麼劍,而是有適合自己的絕世好劍就絕對不用絕世第二劍。所以用了一段時間的IDLE我就決定換一款炫酷的編譯器,於是我選擇了Atom(這個時候有一個認識上的錯誤。)然後一個字都沒寫就安裝activate-power-mode插件,開始震屏,冒泡,好不炫酷。

2

 

安裝好了python,有了編譯器,我們開始編程了,打開編譯器輸入

print (“Hello Word”),保存文件名為1.py,就把它保存在桌面上。然後cmd

cd /d C:\\Users\Administrator\Desktop

python 1.py

如果列印:Hello word,那麼恭喜你,你學會編程了!(我的天!)如果列印失敗,那麼你和兄弟我起初時犯了一樣的錯誤:沒有設置環境變數。

3

這張圖應該可以說明問題了,我的電腦>屬性>高級系統設置>環境變數>pach>最後面加;G:\python27(根據自己安裝路徑來改)。

這回就可以列印了,好吧你也學會編程了!(我天哪!)

 

0x001 將網頁下載到本地

我們要用到python的標準模塊urllib,具體下麵的多種方法可以dir打開查看的,代碼如下,供您消遣。大多數同學都會覺得太小兒科的,不太懂得不必細究,只需知道用這麼個模塊,這麼個方法可以乾這麼個事情!

# -*-coding:utf-8 -*-

# 首先進行編碼申明

import urllib

# 導入urllib模塊

url = "http://www.xxoo.com/"

# 變數賦值

urllib.urlretrieve(url, "C:\\Users\\用戶名\\Desktop\\g00gle.txt")

# urlretrieve方法下載到本地

這樣就將網頁下載到本地了

4

5

0x002 判斷網頁是否可以抓取以及抓取進度

思路是這樣的:我們針對一個網頁首先要看它是否可以爬取,如果可以我們抓取他的什麼?抓取它的內容、頭部信息、狀態碼、傳入網址等,代碼如下:

# -*-coding:utf-8 -*-
import urllib
url = "http://www.163.com/"
html = urllib.urlopen(url)
# content = html.read().decode('gbk','ignore').encode(''utf-8)
# print(content)
code = html.getcode()
# 網頁狀態碼,變數code是一個整形

if code == 200:
  print html.read()
  print html.info()

else:
  print "不明飛行物."
# if判斷語句判斷網頁返回是否正常,如果正常返回他的內容、頭部信息、狀態碼、傳入網址等

6

這裡,urllib中用的的方法:

# urlopen()
#獲取類文件對象
# read()
#讀取文件內容
# infor
# 獲取頭部信息Header
#Getcode
#獲取網頁狀態碼
#geturl
#傳入網址

舉一個例子:
7
這是某站的Header、Sever、Content-Type、Last-Modified

用上面代碼抓取列印的結果:
8
然後我們用回調函數的方法寫一段有讀取進度的抓取網頁的代碼。

# -*-coding:utf-8 -*-

import urllib

def callback(a,b,c):

    # 回調函數
    # @a:xxx
    # @b:xxx
    # @c:xxx

    down_program = 100.0 * a * b / c

    if down_program >100:
        down_program =100

    print "%.1f%%"% down_program
    # 字元串拼接%.4f讓輸出小數點後1位
    print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>100%"


url = "http://tieba.baidu.com/"
local = "C:\\Users\\Joe\\Desktop\\papa2.html"

urllib.urlretrieve(url,local,callback)
# 調用了上面封裝的callback函數

技術有限,本來想讓它

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>100%這樣讀取的,懶得弄了,沒再深究。

 

0x003 你發現換了編譯器

對的,至於是為什麼呢?因為到後來我才明白編譯器、文本編譯器、IDE之間的區別,真是愚笨!我是這樣理解的,就像大保健一樣,IDE小姐可以提供陪吃、推拿、跳舞、刮痧、n推背等服務,編譯器呢晚上進屋白天走人,文本編譯器……類似於什麼呢?充氣娃娃?它們不能對比各有所長。Atom嚴格上來說屬於文本編譯器,本身不能斷點測試,但載入插件後可以。還有,Atom想Chrorme一樣任性,自動強制裝在系統盤,其實之前忍了它……現在找到我的絕世好劍了,不能忍,Pycharm取而代之。Sublimetext,人氣之高,自然也不錯。

 

0x004 本章小結

本章我們安裝了Python環境,配置了環境變數,淺嘗了編程,抓取了網頁內容,並有進度條的下載到了本地。其實都是一些簡單的事情。簡單區分了一下編譯器、文本編譯器、IDE之間的區別。這個過程中我肯定有認識上和方法上不當的地方,歡迎大家批過來!預知後事如何,咱們下回分解!

 

—————— 9

未經溝通轉載,將追究法律責任,請尊重原創勞動成果!


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

-Advertisement-
Play Games
更多相關文章
  • 前言 截至2020年,Java仍然是構建Web應用程式的最流行的編程語言之一,儘管它必須面對來自Go,Python和TypeScript等新型語言的激烈競爭。 在Java世界內部,Spring框架已成為微服務開發的事實上的標準,通過諸如Spring Boot和Spring Data之類的庫,該框架易 ...
  • 本文將介紹一個重要的 "數據結構" —棧,和之前講到的 "鏈表" 、 "數組" 一樣也是一種數據呈 線性排列 的數據結構,不過在這種結構中,我們只能訪問最新添加的數據。棧就像是一摞書,拿到新書時我們會把它放在書堆的最上面,取書時也只能從最上面的新書開始取。 棧 如上就是棧的概念圖,現在存儲在棧中的只 ...
  • 作為一個Java從業者,面試的時候肯定會被問到過HashMap ...
  • 經過這次在公司實習中獲取到的經歷,我發現確實有時候書本上的知識發揮的作用微乎其微,好像是被問題打了太極拳一樣,你明明想去攻剋這個地方,他卻給你報了其他地方的錯誤。 平常的一些小項目根本就不能匹配到企業級別的開發經驗尤其我也不是ACM得獎的大佬,更是覺得尤為不適應,還好經過4個月左右的實習時間,我漸漸 ...
  • 結構體模板 1 struct STU 2 { 3 string name; //用string可以代替char 4 string num; 5 int s; 6 }; sort是用快速排序實現的,屬於不穩定排序,stable_sort是用歸併排序實現的,因此是穩定的。從此以後,為了保險起見我打算使用 ...
  • handler參數映射: 接下來就是Spring的各個處理細節了,無論框架如何瘋轉其實我們處理請求的流程是不變的,設計到的操作也是固定的,舉個例子,當我們要實現一個登陸功能時: 創建一個用於處理登錄請求的Servlet 實現doget等其他http方法(一些情況可能根據業務需要限制請求方法) 從re ...
  • 一. MybatisProperties 在使用 mybatis 時, 還需要對mapper進行配置: mybatis: mapper-locations: classpath:mapper/**Mapper.xml 這些配置其實是映射到 mybatis-spring-boot-autoconfig ...
  • 1.今日內容 模塊基礎知識 time/datetime json/picle shutil logging 其他 2.內容回顧和補充 2.1模塊(類庫) 內置 第三方 自定義 面試題: 列舉常用內置模塊:json / time / os/ sys 2.2 定義模塊 定義模塊時可以把一個py文件或一個 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...