天天看點

從零開始學爬蟲1

爬蟲

爬蟲的概念

絡爬蟲(又被稱為網頁蜘蛛,網絡機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取網際網路資訊的程式或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模拟程式或者蠕蟲。

爬蟲的步驟

  1. 準備目标站點的位址,然後在浏覽器上分析一下網站
  2. 網絡請求,下載下傳網站源代碼
  3. 從源碼中解析你想要的内容
  4. 儲存内容
  5. 整理資料結果

建立項目,開始最簡單的爬蟲

#目标站點的位址
url='https://www.i4.cn/wper_1_0_0_1.html'
           
#引入網絡請求的庫
from urllib import request
           
#進行網絡請求,傳回響應對象
resp=request.urlopen(url)
#讀取響應體
content=resp.read()
print(content)
           

因為在寫爬蟲的時候,經常會遇到有反爬蟲機制,對爬去速度和次數都有影響,是以,我們在爬取時最好爬一次,然後儲存到本地

# 打開或者建立一個檔案
    file = open('i4.html', 'w', encoding='utf-8')
    # 把下載下傳的源碼儲存到本地
    content = str(content, encoding='utf-8')
    file.write(content)
           

儲存到本地之後,上面請求和下載下傳就不用再執行了,我們一般封裝為一個方法,在我們再次需要請求的時候再調用,那麼完整的代碼:

def install():
    # 目标站點的位址
    url = 'https://www.i4.cn/wper_1_0_0_1.html'
    # 進行網絡請求,傳回響應對象
    resp = request.urlopen(url)
    # 讀取響應體
    content = resp.read()
    print(content)
    # 打開或者建立一個檔案
    file = open('i4.html', 'w', encoding='utf-8')
    # 把下載下傳的源碼儲存到本地
    content = str(content, encoding='utf-8')
    file.write(content)
    pass
           

解析内容

我們要先從本地讀取内容

#讀取本地的内容
    file = open('i4.html', 'r', encoding='utf-8')
    content=file.read()
           

對内容進行解析,需要一個解析工具,常用的幾個有:bs4 、pyquery兩種解析庫,也可以xpath解析,或者用正規表達式,初學者使用bs4比較簡單,引入bs4庫,這個庫是第三方,需要先下載下傳,下載下傳方式:

1: 在指令行中 輸入 pip install bs4

2: pycharm開發工具也有下載下傳的地方:

file — settings

從零開始學爬蟲1

點右上角+ 号 ,出來下一個界面

從零開始學爬蟲1

輸入你要的庫,點左下角的下載下傳即可,等待下載下傳完成

那麼接下來,就可以進行解析

#擷取解析工具的對象:參數是要解析的内容和解析的規則
    soup= BeautifulSoup(content,'html.parser')

接下來根據id或者class或者其他屬性,一級一級往下找自己想要的内容
           
#getElementsByClassName(),根據class找,傳回值為清單
    # ibox=soup.select('.ibox')[0]
    #     #     # print(ibox)
    # ibox=soup.select('#wper')
    # print(ibox)
    #select()參數無論是id還是class,傳回值都是清單
    #select_one('')參數無論是id還是class,傳回值都是單個
    ibox=soup.select_one('#wper')
    #jbox=soup.find(attrs={'class':'jbox'})
    jbox=soup.find(class_='jbox')
    kbox=jbox.find(class_='kbox')
    list=kbox.find_all(class_='list')
    for item in list:
        img=item.select_one('.wper_img')
        #擷取标簽某個屬性的值
        imgUrl=img['src']
        print(imgUrl)
           

在這裡,bs4有幾種查找的方法:find find_all select select_one

注意使用方式就行

下載下傳:直接可以用request下載下傳,第一個是圖檔位址,第二個是儲存的路徑

savePath=name+'.jpg'
  request.urlretrieve(imgUrl,savePath)