爬蟲入門到放棄01:什麼是爬蟲

2021-02-20 入門到放棄之路
序章

18年初,還在實習期的我因為工作需求開始接觸Java爬蟲,從一個網站爬取了163W條poi數據,這是我人生中寫的第一個爬蟲,也是唯一的一個Java爬蟲。後來這些poi數據也成了我畢業設計中的一部分。後來開始學習Python爬蟲以及爬蟲框架Scrapy,尤其是Scrapy,前前後後研究了一個多月,並利用Scrapy構建了千萬級數據的ICA(網際網路內容識別)資源庫。

寫爬蟲系列的目的主要是想記錄一下自己學習爬蟲的經歷,以及遇到的一些問題,也希望能夠給爬蟲初學者帶來一些啟示。之前給同事普及爬蟲的時候,自己動手做了人生中的第一個PPT,所以爬蟲系列文章將圍繞著這個PPT來開展。

系列結構目錄

如圖,將從四個方面來介紹爬蟲。

爬蟲入門:主要包括爬蟲的基本概念、技術棧、爬蟲程序的開發等。反爬技術:主要是講述常見的反爬蟲技術以及應對方法。Scrapy框架:目前最好的爬蟲框架,也是本系列文章的重點內容。風險規避:講述如何編寫規範的爬蟲,如何避免數據風險。前言

很多人包括我在內,剛開始聽到爬蟲的時候都會有一種朦朦朧朧、遙不可及的感覺。很多人覺得只有程式設計師才需要使用爬蟲,其實並不是。至少,Python處理文檔和爬蟲的能力是面向日常工作的。

舉個慄子:有人需要每天從各個網站上粘貼成百上千條數據到excel中,如果使用爬蟲,一個requests、pandas或xlwt就搞定了,幾十行代碼而已。日常上線需求需要根據模板來寫三個文檔進行上傳,前前後後粘貼需要四五分鐘,後來我為了偷懶用Python寫了個程序打包成exe,點擊一下幾秒就完成了。所以,Python讓日常工作工作更高效,值得更多的人學習。

本篇文章主要從第一章爬蟲入門開始講起。

爬蟲入門爬蟲概念概念

什麼是爬蟲?

這是當初我學習開發爬蟲的時候,腦海裡浮現的第一個問題。不論網上怎麼介紹爬蟲,是spider、crawler也好,是robots也罷。我的理解就是:「模擬人的行為從網頁上獲取的數據的程序」。更具象一些:在Java中爬蟲是Jsoup.jar,在Python中爬蟲是requests模塊,甚至Shell中的curl命令也可以看做是爬蟲。

爬蟲庫可以分為兩個部分。一是請求部分,主要負責請求數據,例如Python的requests;二是解析部分,負責解析html獲取數據,例如Python的BS4。

爬蟲做了什麼工作?

模仿人的行為從網頁獲取數據。一個人,需要先打開瀏覽器、輸入網址,從網站後臺獲取網頁並加載到瀏覽器展示,最後才能獲取數據。爬蟲的請求部分,就相當於瀏覽器的角色,會根據你輸入的url從網站後臺獲取html,而解析部分就會根據預先設定的規則,從html中獲取數據。

而開發者的工作,一是裝飾請求部分,例如在請求頭中添加User-Agent、Cookie等,讓網站覺得是一個人通過瀏覽器來訪問的,而不是一個程序。二是通過選擇器來編寫規則,從頁面獲取數據。

這是瀏覽器的請求頭內容。

請求頭技術棧技術棧

做爬蟲需要什麼具備什麼樣的技術?是不是只有大佬才可以?其實並不是。這裡主要分為兩個層次要求。

基本要求

程式語言:只需要有Java或者Python基礎即可,有基本的Html閱讀能力以及CSS選擇器、Xpath選擇器、正則表達式的使用能力。

數據存儲:爬取的數據要只有存儲下來才有意義。數據可以保存在文件或資料庫中,這就要求開發者有文件讀寫或資料庫操作的能力。對於資料庫,掌握基本的表結構設計、增刪改查的能力即可。

開發者工具:爬蟲開發者使用最多的工具,各種瀏覽器按下F12都會彈出。通常用來攔截請求,定位元素,查看JS源文件。

開發者工具進階要求

在爬蟲的開發中,會遇到各種各樣的問題,就需要有獨立思考和解決問題的能力。目前,很多網站都採用了異步加載數據或JS加密,所以需要具備Ajax和JS方面的知識。

網絡知識。基本的狀態碼:20x成功,30x轉發重定向,40x請求不存在、50x服務端問題。有時候還需要TCP的知識,例如established、time_waited等TCP連接狀態代表著什麼。

爬蟲開發

基礎概念我們已經講完,怎麼來開發個爬蟲呢?舉個慄子:

鬥羅大陸

如圖,是星鬥蒼涼、月色照亮的動漫鬥羅大陸的播放頁面。我們以此為例,開發爬蟲來獲取頁面數據。

Java爬蟲

Java爬蟲的開發主要使用Jsoup。

引入Jsoup依賴:

    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.11.2</version>
    </dependency>

程序開發:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class JavaCrawler {
    public static void main(String[] args) throws IOException {
        String url = "https://v.qq.com/detail/m/m441e3rjq9kwpsc.html";
        // 發起請求,獲取頁面
        Document document = Jsoup.connect(url).get();
        // 解析html,獲取數據
        Element body = document.body();
        Element common = body.getElementsByClass("video_title_cn").get(0);
        String name = common.getElementsByAttribute("_stat").text();
        String category = common.getElementsByClass("type").text();
        Elements type_txt = body.getElementsByClass("type_txt");
        String alias = type_txt.get(0).text();
        String area = type_txt.get(1).text();
        String parts = type_txt.get(2).text();
        String date = type_txt.get(3).text();
        String update = type_txt.get(4).text();
        String tag = body.getElementsByClass("tag").text();
        String describe = body.getElementsByClass("_desc_txt_lineHight").text();
        System.out.println(name + "\n" + category + "\n" + alias + "\n" + area + "\n" + parts + "\n" + date + "\n" + update + "\n" + tag + "\n" + describe);

    }
}

Python爬蟲

對於Python爬蟲的開發,使用的是requests和bs4。

安裝模塊:

pip install requests bs4

程序開發:

import requests
from bs4 import BeautifulSoup

url = 'https://v.qq.com/detail/m/m441e3rjq9kwpsc.html'
# 發起請求,獲取頁面
response = requests.get(url)
# 解析html,獲取數據
soup = BeautifulSoup(response.text, 'html.parser')
name = soup.select(".video_title_cn a")[0].string
category = soup.select("span.type")[0].string
alias = soup.select("span.type_txt")[0].string
area = soup.select("span.type_txt")[1].string
parts =soup.select("span.type_txt")[2].string
date = soup.select("span.type_txt")[3].string
update = soup.select("span.type_txt")[4].string
tag = soup.select("a.tag")[0].string
describe = soup.select("span._desc_txt_lineHight")[0].string
print(name, category, alias, parts, date, update, tag, describe, sep='\n')

上面兩個程序輸出相同的結果:

至此,鬥羅大陸的爬蟲開發工作就完成了。從代碼也能看出來,請求部分也就一行,大部分都是解析部分的,這裡使用css選擇器來完成數據的解析。

我們再來看看請求部分獲取的網頁內容:

請求響應內容

當然,一個完整的爬蟲程序除了以上模塊,還需要有存儲模塊,必要的時候還需要代理池模塊。其次,對於整個大型網站數據的爬取還需要對網站進行深度/廣度遍歷來完成,還需要考慮到如果爬蟲中斷,如何從斷點開始繼續爬取等方面的設計。這一部分的內容後面會寫。

對於Jsoup資料、requests、scrapy視頻教程,公眾號後臺回復 「爬蟲資料」 即可獲取。

結語

這一篇文章不對程序的開發做過多的深入探討,只講述爬蟲的概念以及程序演示。而下一篇文章會根據上面的程序,著重對Jsoup和requests、bs4模塊以及css選擇器的使用深入探究。期待下一次相遇。

收藏、在看、轉發

相關焦點

  • python爬蟲-- Scrapy入門
    準備寫一個系列的Scrapy爬蟲教程,一方面通過輸出鞏固和梳理自己這段時間學到的知識,另一方面當初受惠於別人的博客教程,我也想通過這個系列教程幫助一些想要學習Scrapy的人。Scrapy簡介Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
  • 爬蟲,從入門到入獄?
    由此,大數據業務的合規合法問題、爬蟲技術的合理應用問題,引起了大數據和金融科技行業的特別重視。這樣導致網上流傳一個順口溜:爬蟲玩得好,監獄進得早。數據玩得溜,牢飯吃個夠。那什麼是爬蟲呢?爬蟲技術到底違規嗎?
  • Python爬蟲從入門到精通只需要三個月
    如何入門Python,為了能夠幫助大家更輕鬆的學好Python開發,Python爬數據,Python數據分析等相關理論知識,給大家共同分享自己一套Python學習生活資料,文章最後面的有附屬的相關資料,無論你是大牛還是小白,是想轉行還是想入行都可以來了解,一起不斷進步以及一起努力學習
  • 如何快速學會Python爬蟲(入門篇)
    一、爬蟲入門Python爬蟲入門一之綜述2.Python爬蟲入門二之爬蟲基礎了解3. Python爬蟲入門三之Urllib庫的基本使用4. Python爬蟲入門四之Urllib庫的高級用法5. Python爬蟲入門五之URLError異常處理6.
  • Python爬蟲入門教程:超級簡單的Python爬蟲教程
    這是一篇詳細介紹 Python 爬蟲入門的教程,從實戰出發,適合初學者。讀者只需在閱讀過程緊跟文章思路,理清相應的實現代碼,30 分鐘即可學會編寫簡單的 Python 爬蟲。這篇 Python 爬蟲教程主要講解以下
  • Python3網絡爬蟲~零基礎入門01~基礎概念 2020原創
    想必大家對網絡爬蟲技術很感興趣,現在又是大數據時代,如果自行零零散散的網上學習,可能會有很多的困惑,還有就是信息的過時問題,本人打算從今天開始,從零基礎開始寫起,如果沒有什麼意外的話會一直寫到完,重點和踩坑的地方我會特殊說明,免得理解上會有困難,我會儘量用通俗的語音,儘量少用專業術語免得你還得去查什麼意思
  • Python爬蟲從入門到放棄(一)||Request:請求
    我準備挖個新坑,教各位大寶貝們寫爬蟲,難度定義在-100,俺保證只要會打字的都能學會!開坑的理由是我前兩篇文章發出之後一些熱【話】心【多】的網友給我了一些反饋,在這也給大家分享一下:熱心網友「施肥宅」:郭小帥,你的文章都挺有意思的,但是我們看不懂有個毛用?你自己在那瞎分析有個毛用?呵,直男,he tui!
  • 1小時入門 Python 爬蟲
    二、什麼是爬蟲?網絡爬蟲:是指按照一定的規則,自動抓取全球資訊網信息的程序或者腳本,從中獲取大量的信息。伺服器接收到請求之後就會對請求做相應的處理,並將結果返回給瀏覽器。pandas 保存數據到 Excel,其步驟為:導入相關的庫;將爬取到的數據儲存為 DataFrame 對象;從 Excel 文件中讀取數據並保存。
  • Python 爬蟲入門
    二、什麼是爬蟲?網絡爬蟲:是指按照一定的規則,自動抓取全球資訊網信息的程序或者腳本,從中獲取大量的信息。常見的加載模式學習爬蟲有必要了解網頁常見的兩種加載模式(後續爬蟲過程中,經常需要用到)。4.伺服器接收到請求之後就會對請求做相應的處理,並將結果返回給瀏覽器。
  • 進階版python獲取天氣信息——爬蟲入門
    瀏覽器基於這些問題,今天我們就來個進階版的獲取天氣信息方法——爬蟲獲取,同時該例子也是理解入門爬蟲的最好例子。1.爬蟲先來講講爬蟲是什麼?爬蟲,又叫網絡蜘蛛,是一個探測的機器。它模擬人的行為去各個網站溜達,看到有用的信息就想自己下載下來保存一份。簡答一句話就是在網頁上提取我們想要的信息。
  • Python爬蟲從入門到精通(3): BeautifulSoup用法總結及多線程爬蟲爬取糗事百科
    本文是Python爬蟲從入門到精通系列的第3篇。我們將總結BeautifulSoup這個解析庫以及常用的find和select方法。
  • 10個Python爬蟲入門實例
    ,準備了幾個簡單的入門實例,分享給大家。爬取強大的BD頁面,列印頁面信息# 第一個爬蟲示例,爬取百度頁面import requests #導入爬蟲的庫,不然調用不了爬蟲的函數response = requests.get("http://www.baidu.com") #生成一個response對象response.encoding = response.apparent_encoding
  • Python爬蟲知識點梳理
    回復「1024」有驚喜學任何一門技術,都應該帶著目標去學習,目標就像一座燈塔,指引你前進,很多人學著學著就學放棄了,很大部分原因是沒有明確目標,所以,在你準備學爬蟲前,先問問自己為什麼要學習爬蟲。有些人是為了一份工作,有些人是為了好玩,也有些人是為了實現某個黑科技功能。不過可以肯定的是,學會了爬蟲能給你的工作提供很多便利。
  • Python網頁爬蟲入門指導
    雖然之前有過一些基礎,但是這次還是耗費了一些時間,因為網上,尤其是中文科技網站太多坑要踩,所以,我在這裡用最簡潔的方式寫下網頁爬蟲的入門方法,希望能夠幫助到對網頁爬蟲感興趣卻無從下手的同學。就如同標題指明的那樣,本文主要針對入門,如果尋求進階,或者在爬蟲方面走的更遠,本文提供的幫助也許是微乎其微的。
  • Python網絡爬蟲實戰(一)快速入門
    本系列從零開始闡述如何編寫Python網絡爬蟲,以及網絡爬蟲中容易遇到的問題,比如具有反爬,加密的網站,還有爬蟲拿不到數據,以及登錄驗證等問題
  • 從零開始的python爬蟲速成指南
    若不知道自己是否滿足入門條件,也沒關係,這兒有份資料:https://www.zhihu.com/ question/20899988/answer/783269460小夥伴可以據此進行一下自我判斷、或簡單入門,emm…培養一下爬蟲興趣也是很棒的!!
  • 精通 Python 網絡爬蟲:網絡爬蟲學習路線
    5、精通一款爬蟲框架事實上,當你學習到這一步的時候,你已經入門了。這個時候,你可能需要深入掌握一款爬蟲框架,因為採用框架開發爬蟲項目,效率會更加高,並且項目也會更加完善。8、掌握分布式爬蟲技術與數據去重技術如果你已經學習或者研究到到了這裡,那麼恭喜你,相信現在你爬任何網站都已經不是問題了,反爬對你來說也只是一道形同虛設的牆而已了。但是,如果要爬取的資源非常非常多,靠一個單機爬蟲去跑,仍然無法達到你的目的,因為太慢了。
  • 網絡爬蟲違法?扯!繼續學習我的第一個爬蟲
    百度作為一個搜尋引擎,良好地遵守了淘寶網的robot.txt協議,所以你是不能從百度上搜索到淘寶內部的產品信息的。淘寶的Robots協議對谷歌爬蟲的待遇則不一樣,和百度爬蟲不同的是,它允許谷歌爬蟲爬取產品的頁面Allow:/product。因此,當你在谷歌搜索「淘寶iphone7」的時候,可以搜索到淘寶中的產品,如圖所示。
  • python爬蟲入門-通過茅臺腳本講些爬蟲知識,應用和價值
    搶茅臺的腳本其實屬於爬蟲腳本的一類,它實現了模擬登陸,模擬訪問並抓取數據。我們從爬蟲開始來學習Python做項目,從這篇開始記錄下爬蟲相關的筆記和知識點。正文什麼是爬蟲到底什麼是爬蟲?你可以理解為爬蟲是網際網路上的一隻蜘蛛,如果遇到一些網絡數據或資源,這隻「蜘蛛」可以把這些數據和資源爬取下來。
  • 爬蟲教程千千萬,一到實戰全完蛋?
    爬蟲教程多爬蟲受眾多、用途廣、入門亦簡單。企業的發展野望,讓人們想盡一切辦法想要獲取更多的有關自己、有關競爭對手、有關行業大勢的數據,使得網絡數據採集這一原本比較偏門的計算機技能越來越得到廣大上班族的重視和認可。