1. 程式人生 > >【Python】 簡單網路爬蟲實現

【Python】 簡單網路爬蟲實現


引言

網路爬蟲(英語:web crawler),也叫網路蜘蛛(spider),是一種用來自動瀏覽全球資訊網的網路機器人。其目的一般為編纂網路索引。 --維基百科

網路爬蟲可以將自己所訪問的頁面儲存下來,以便搜尋引擎事後生成索引供使用者搜尋。
一般有兩個步驟:1.獲取網頁內容  2.對獲得的網頁內容進行處理

 

準備

Linux開發環境

python3.61安裝方法:https://www.cnblogs.com/kimyeee/p/7250560.html

安裝一些必要的第三方庫
其中requiests可以用來爬取網頁內容,beautifulsoup4用來將爬取的網頁內容分析處理

pip3 install requiests
pip3 install beautifulsoup4

 


第一步:爬取

使用request庫中的get方法,請求url的網頁內容
更多瞭解:http://docs.python-requests.org/en/master/

 

編寫程式碼
 

[[email protected] demo]# touch demo.py
[[email protected] demo]# vim demo.py
#web爬蟲學習 -- 分析
#獲取頁面資訊

#輸入:url
#處理:request庫函式獲取頁面資訊,並將網頁內容轉換成為人能看懂的編碼格式
#輸出:爬取到的內容

import requests

def getHTMLText(url):
    try:
        r = requests.get( url, timeout=30 )
        r.raise_for_status()    #如果狀態碼不是200,產生異常
        r.encoding = 'utf-8'    #字元編碼格式改成 utf-8
        return r.text
    except:
        #異常處理
        return " error "

url = "http://www.baidu.com"
print( getHTMLText(url) )
[[email protected] demo]# python3 demo.py

 

 

 

 

第二步:分析

使用bs4庫中BeautifulSoup類,生成一個物件。find()和find_all()方法可以遍歷這個html檔案,提取指定資訊。
更多瞭解:https://www.crummy.com/software/BeautifulSoup/


編寫程式碼

[[email protected] demo]# touch demo1.py
[[email protected] demo]# vim demo1.py
#web爬蟲學習 -- 分析
#獲取頁面資訊

#輸入:url
#處理:request庫獲取頁面資訊,並從爬取到的內容中提取關鍵資訊
#輸出:列印輸出提取到的關鍵資訊

import requests
from bs4 import BeautifulSoup
import re

def getHTMLText(url):
    try:
        r = requests.get( url, timeout=30 )
        r.raise_for_status()    #如果狀態碼不是200,產生異常
        r.encoding = 'utf-8'    #字元編碼格式改成 utf-8
        return r.text
    except:
        #異常處理
        return " error "

def findHTMLText(text):
    soup = BeautifulSoup( text, "html.parser" )    #返回BeautifulSoup物件
    return soup.find_all(string=re.compile( '百度' )) #結合正則表示式,實現字串片段匹配

url = "http://www.baidu.com"
text = getHTMLText(url)        #獲取html文字內容
res = findHTMLText(text)    #匹配結果

print(res)        #列印輸出
[[email protected] demo]# python3 demo1.py

 

 

 

一個例子:中國大學排名爬蟲

參考連結:https://python123.io/index/notebooks/python_programming_basic_v2

#e23.1CrawUnivRanking.py
import requests
from bs4 import BeautifulSoup
allUniv = []
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return ""
def fillUnivList(soup):
    data = soup.find_all('tr')
    for tr in data:
        ltd = tr.find_all('td')
        if len(ltd)==0:
            continue
        singleUniv = []
        for td in ltd:
            singleUniv.append(td.string)
        allUniv.append(singleUniv)
def printUnivList(num):
    print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名","學校名稱","省市","總分","培養規模"))
    for i in range(num):
        u=allUniv[i]
        print("{:^4}{:^10}{:^5}{:^8}{:^10}".format(u[0],u[1],u[2],u[3],u[6]))
def main():
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
    html = getHTMLText(url)
    soup = BeautifulSoup(html, "html.parser")
    fillUnivList(soup)
    printUnivList(10)
main()

展示