Python爬蟲實踐入門篇

一、前言

學習Python二個多月啦,週末時開始興趣學習爬蟲,雖然有點概念,可是也折騰了大半天,下面就開始簡要記錄一下吧。html

二、須要的準備

  • Python:須要基本的python語法基礎
  • requests:專業用於請求處理,requests庫學習文檔中文版
  • lxml:其實能夠用pythonth自帶的正則表達式庫re,可是爲了更加簡單入門,用 lxml 中的 etree 進行網頁數據定位爬取。

經過pip安裝 requests 和 lxml 庫,在終端輸入:python

pip install requests
pip install lxml
複製代碼

注:若是是安裝到Python3就用pip3 installgit

下載過程成功的輸出:github

Collecting lxml
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/00/fd/5e65f293e366a63198dade275b886e5d24752367c2e67e3993023b0d58ef/lxml-4.2.3-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (8.7MB)
    100% |████████████████████████████████| 8.7MB 821kB/s 
Installing collected packages: lxml
Successfully installed lxml-4.2.3
複製代碼
  • 注: 若是安裝過程遇到任何問題,請谷歌吧,若是網上找不到答案,也不要問我!找不到答案我直播吃翔!!!

三、實踐過程

爲了這過程有點興趣,我找了一個美圖的網站,爬蟲了一波圖片~正則表達式

實踐爬蟲的網站連接:https://www點aitaotu點com(注意,這不是打廣告!)chrome

  • 下載頁面html內容:
page = 'https://www點aitaotu點com/guonei/36350.html'
    data = requests.get(page).text
    dom = etree.HTML(data)
複製代碼
  • 解析(定位)元素:
title_path = '//*[@id="photos"]/h1/text()'
    totalpage_path = '//*[@id="picnum"]/span[2]/text()'
    image_path = '//*[@id="big-pic"]/p/a/img'
複製代碼

這裏的xpath怎麼獲取,就是網頁裏面,打開開發者檢查元素工具,在safari和chrome都有這個功能:macos

20180710-html-show-element.png

20180710-html-copy-xpath.png

  • 獲取元素內容:
title = dom.xpath(title_path)[0]
    total = dom.xpath(totalpage_path)[0]
    image_url = dom.xpath(image_path)[0]

    img_src = image_url.xpath('./@src')[0]
    img_alt = image_url.xpath('./@alt')[0]
複製代碼

這裏解析就不解析了,其實經過PyCharm IDE可能實時查看每一個對象的屬性,能夠更清晰的瞭解解析的元素結構,幫助理解,這裏就暫時不說IDE的方法啦,你們有興趣能夠試試,也是很簡單的~django

最後拿到圖片連接,就是下載圖片而後保存輸出到電腦啊!(文章尾附完整代碼!)編程

總結

爬蟲入門就這樣結束啦!學習了python後,發現語法很簡單,代碼很輕鬆就完成!不到100行!!!網頁爬蟲

python經過各類庫,解決了編程語言自身的龐大,完成了本身是膠水語言的特色!

經過此次實踐,其實,有不少細節東西,只有本身作了才知道,比較說保存圖片的路徑,找到當前目錄,怎麼分目錄保存,目錄文件操做,這些都是本身以前實踐了一個django工具學習過來的。因此,如今經歷多了,才知道,何時學習都不晚,有些東西,真的是不知道何時你會用上,真的,本身早知道這個道理幾年,就不像年輕時那麼想,這東西怎麼可能會用上,不學!!!果真是年輕坑爹!!!學會老,學到老吧!

代碼

#!/usr/local/bin/python3
#coding=utf-8

import os
import requests
from lxml import etree


def downloadImages(url):
    data = requests.get(page).text
    dom = etree.HTML(data)

    title_path = '//*[@id="photos"]/h1/text()'
    totalpage_path = '//*[@id="picnum"]/span[2]/text()'
    image_path = '//*[@id="big-pic"]/p/a/img'

    title = dom.xpath(title_path)[0]
    total = dom.xpath(totalpage_path)[0]
    image_url = dom.xpath(image_path)[0]

    img_src = image_url.xpath('./@src')[0]
    img_alt = image_url.xpath('./@alt')[0]

    print(title, total, img_src, img_alt)

    cwd = os.getcwd()
    save_path = os.path.join(cwd, 'images/' + title)
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    
    print(u'保存圖片的路徑:', save_path)

    img_path = os.path.dirname(img_src)
    img_name = os.path.basename(img_src)
    img_format = img_name.split('.')[1]
    print(img_path, img_name)

    for i in range(1, int(total) + 1):
        new_img_url = '%s/%02d.%s' % (img_path, i, img_format)
        save_img_path = '%s/%02d.%s' % (save_path, i, img_format)
        # 下載圖片
        image = requests.get(new_img_url)
        # 命名並保存圖片
        with open(save_img_path, 'wb') as f:
            f.write(image.content)




if __name__ == '__main__':

    url = 'https://www.aitaotu.com/'

    # download list
    list = ['guonei/36350.html', 'guonei/36352.html', 'guonei/36351.html', 'guonei/36357.html', 'guonei/36250.html',
            'guonei/36341.html', 'guonei/36334.html', 'guonei/36306.html', 'guonei/35969.html', 'guonei/35219.html',
            'guonei/36290.html', 'guonei/36277.html', 'guonei/36263.html', 'gangtai/36303.html', 'gangtai/36226.html',
            'guonei/35260.html', 'guonei/35247.html', 'guonei/36257.html', 'guonei/36221.html', 'guonei/21647.html',
            'guonei/21499.html', 'guonei/36319.html', 'guonei/34903.html', 'guonei/14148.html', 'guonei/33780.html',
            'guonei/14338.html', 'guonei/14550.html', 'guonei/14818.html', 'guonei/16820.html', 'guonei/18388.html',
            'guonei/13447.html', 'guonei/25912.html', 'guonei/13991.html', 'guonei/8246.html', 'guonei/36171.html'
            ]

    print(u'準備下載:%d套圖', len(list))

    for type in list:
        page = url + type
        downloadImages(page)


    print(u'下載完成啦!')

複製代碼

代碼就沒有太多註釋,由於很簡單,就說一下運行方式吧,在終端:

python2:

python YellowImage.py
複製代碼

python3:

python3 YellowImage.py
複製代碼

最後的成果:

20180712-results.png

參考


  • 若有疑問,歡迎在評論區一塊兒討論!
  • 若有不正確的地方,歡迎指導!
> 注:本文首發於 [iHTCboy's blog](https://iHTCboy.com),如若轉載,請注來源
相關文章
相關標籤/搜索