Python網(wǎng)絡(luò)爬蟲(由簡入深)

本文章包含內(nèi)容

一、Python必備基礎(chǔ)認(rèn)識
二、Python編寫的初步嘗試(用Sublime Text編寫)
三、網(wǎng)絡(luò)爬蟲-使用Python和urllib、Beautiful Soup庫抓取網(wǎng)頁數(shù)據(jù),并輸出想要的內(nèi)容至plist文件中
四、結(jié)束語

【附1:解決Sublime Text對Python的支持】
【附2:使用python的pip安裝開發(fā)包/庫(示例添加Beautiful Soup庫)】
【附3:使用Beautiful Soup庫來標(biāo)準(zhǔn)輸出網(wǎng)頁內(nèi)容】
【附4:正則表達(dá)式必備基礎(chǔ)知識】
【附5:Sublime Text的控制臺輸入】

一、Python必備基礎(chǔ)認(rèn)識

  • 查看Python版本
    python --versionpython -V(大小的V)

  • 打開查看Mac系統(tǒng)自帶Python2:
    open /System/Library/Frameworks/Python.framework/Versions

  • 打開查看自己安裝的Python3:
    open /usr/local/Frameworks/Python.framework/Versions

  • 查看編譯命令所在的位置
    which python3

  • 在cmd命令行里進(jìn)入和退出Python程序

  • 進(jìn)入:
    進(jìn)入系統(tǒng)Python2:直接輸入python即可;
    進(jìn)入自裝Python3:直接輸入python3即可;
  • 退出:
    方法①:輸入exit(),回車
    方法②:輸入quit(),回車
    方法③:輸入ctrl+z,回車

二、Python編寫的初步嘗試(用Sublime Text編寫)

  • 語法注意
python2.x python3.x
打印 print "Hello world" print ("Hello world")
引入模塊 import urllib2 import urllib.request
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import importlib,sys
importlib.reload(sys)
輸入 raw_input input
  • 導(dǎo)入模塊

設(shè)A為模塊名,B為模塊A中的某個類、方法或者變量等

import A from A import B
含義 導(dǎo)入整個模塊A 導(dǎo)入A中的B
調(diào)用A中的B A.B B
  • 測試Sublime Text對Python編寫的支持
測試Sublime Text對Python編寫的支持.png

另有【附1:解決Sublime Text對Python的支持】

分割圖1.jpg

三、網(wǎng)絡(luò)爬蟲-使用Python和urllib、Beautiful Soup庫抓取網(wǎng)頁數(shù)據(jù),并輸出想要的內(nèi)容至plist文件中

本節(jié)包含內(nèi)容如下:

1、抓取數(shù)據(jù)的必備知識(獲取及打印網(wǎng)頁內(nèi)容)
2、使用BeautifulSoup庫的必備知識
3、使用Beautiful Soup庫抓取網(wǎng)頁數(shù)據(jù),并輸入想要的內(nèi)容至plist文件中示例

1、抓取數(shù)據(jù)的必備知識(獲取及打印網(wǎng)頁內(nèi)容)

以要抓取某個網(wǎng)站上的東西為例,

#-*- coding:utf-8 -*-
import urllib.request
resp=urllib.request.urlopen('http://www.baidu.com')
html=resp.read()
print(html)

一般為了能夠讓輸出內(nèi)容更加刻度,我們都會按照【附3:使用Beautiful Soup庫來標(biāo)準(zhǔn)輸出網(wǎng)頁內(nèi)容】進(jìn)行操作。
要使用Beautiful Soup庫,請參照【附2:使用python的pip安裝開發(fā)包/庫(示例添加Beautiful Soup庫)】進(jìn)行安裝。

2、使用BeautifulSoup庫的必備知識

  • ①、不能創(chuàng)建bs4.py的文件,會造成與系統(tǒng)沖突,同時在from bs4 import BeautifulSoup代碼處報(bào)錯
  • ②、soup = BeautifulSoup(html, 'html.parser')不要漏寫解析器,要不然會有No parser was explicitly specified, so I'm using the best available HTML par警告
  • ③、更多問題可查看Beautiful Soup 4.4.0 官網(wǎng)文檔

3、使用Beautiful Soup庫抓取網(wǎng)頁數(shù)據(jù),并輸出想要的內(nèi)容至plist文件中示例

#-*- coding:utf-8 -*-
import urllib.request
from bs4 import BeautifulSoup

import importlib,sys 
importlib.reload(sys)

# 函數(shù)
def  printPlistCode():
    #1.得到這個網(wǎng)頁的 html 代碼 #
    html = urllib.request.urlopen("http://movie.douban.com/chart").read()

    #2.轉(zhuǎn)換 一種格式,方便查找
    #soup = BeautifulSoup(html, 'html.parser')
    soup = BeautifulSoup(html,'lxml')
    print(soup.prettify())
    print(soup.title)
    print(soup.title.name)
    print(soup.title.string)
    print(soup.title.parent.name)
    print(soup.p)
    print(soup.p["class"])
    print(soup.a)
    print(soup.find_all('a'))
    print(soup.find(id='link3'))
    print("\n")
    print("\n")
    print("\n")

    #3.  得到 找到的所有 包含 a 屬性是class = nbg 的代碼塊,數(shù)組
    liResutl = soup.findAll('a', attrs = {"class" : "nbg"})
    #4.用于拼接每個字典的字符串
    tmpDictM = ''

    #5. 遍歷這個代碼塊  數(shù)組
    for li in liResutl:

        #5.1 找到 img 標(biāo)簽的代碼塊 數(shù)組
        imageEntityArray = li.findAll('img')

        #5.2 得到每個image 標(biāo)簽
        for image in imageEntityArray:
            #5.3 得到src 這個屬性的 value  后面也一樣 類似 key value
            link = image.get('src')
            imageName = image.get('alt')
            #拼接 由于 py中 {} 是一種數(shù)據(jù)處理格式,類似占位符
            tmpDict = '''@{0}@\"name\" : @\"{1}\", @\"imageUrl\" : @\"{2}\"{3},'''

            tmpDict =  tmpDict.format('{',imageName,link,'}')

            tmpDictM = tmpDictM + tmpDict

    #6.去掉最后一個 , 
    tmpDictM = tmpDictM[0:len(tmpDictM) - 1] #為了能輸出原生中文不要進(jìn)行.encode('utf8')


    #7 拼接全部
    restultStr = '@[{0}];'.format(tmpDictM)

    print(restultStr)


if __name__ == '__main__':
    printPlistCode()

輸出結(jié)果為


抓取到的內(nèi)容.png

下面將其拷貝出來至Xcode,并寫入plist文件中

將抓取的內(nèi)容寫入plist文件的代碼.png

查看輸出到該路徑下的文件內(nèi)容,如圖所示:


整理到plist文件中的內(nèi)容.png

至此,恭喜您已經(jīng)完成抓取網(wǎng)頁數(shù)據(jù),并輸入想要的內(nèi)容至plist文件中。


分割圖1.jpg

四、初探Python的requests模塊

import requests
response=requests.get('https://api.github.com/events')
print(response.text)

其他各種請求方式:常用的就是requests.get()和requests.post()
import requests
response1 = requests.get('https://api.github.com/events')
response2 = requests.post('http://httpbin.org/post', data = {'key':'value'})
response3 = requests.put('http://httpbin.org/put', data = {'key':'value'})
response4 = requests.delete('http://httpbin.org/delete')
response5 = requests.head('http://httpbin.org/get')
response6 = requests.options('http://httpbin.org/get')

五、結(jié)束語

感謝您的細(xì)心查閱,如有不足,還請指教。

【附1:解決Sublime Text對Python的支持】
【附2:使用python的pip安裝開發(fā)包/庫(示例添加Beautiful Soup庫)】
【附3:使用Beautiful Soup庫來標(biāo)準(zhǔn)輸出網(wǎng)頁內(nèi)容】
【附4:正則表達(dá)式必備基礎(chǔ)知識】
【附5:Sublime Text的控制臺輸入】

【附1:解決Sublime Text對Python的支持】

Sublime的.sublime-build文件的位置:~/Library/Application Support/Sublime Text 3/Packages/User

  • 解決Sublime Text對Python的支持
解決Sublime Text對Python的支持.png

【附2:使用python的pip安裝開發(fā)包/庫(示例添加Beautiful Soup庫)】

Mac上裝python的pip安裝包時,顯示-bash: pip: command not found的解決辦法

命令①、curl 'https://bootstrap.pypa.io/get-pip.py' > get-pip.py
命令②、sudo python get-pip.py
使用python的pip安裝Beautiful Soup庫.png

【附3:使用Beautiful Soup庫來標(biāo)準(zhǔn)輸出網(wǎng)頁內(nèi)容】

執(zhí)行如下代碼即可

import urllib.request
from bs4 import BeautifulSoup

html = urllib.request.urlopen("http://movie.douban.com/chart").read()

soup = BeautifulSoup(html,'lxml')
print(soup.prettify())
print(soup.title)
print(soup.title.name)
print(soup.title.string)
print(soup.title.parent.name)
print(soup.p)
print(soup.p["class"])
print(soup.a)
print(soup.find_all('a'))
print(soup.find(id='link3'))

【附4:正則表達(dá)式必備基礎(chǔ)知識】

常用正則表達(dá)式語法

特殊字符 描述
* 匹配前面的子表達(dá)式零次或多次。
+ 匹配前面的子表達(dá)式一次或多次。
? 匹配前面的子表達(dá)式零次或一次。(必須跟在*或者+后邊用)
. 匹配除換行符 \n 之外的任何單字符

因?yàn)?code>.相當(dāng)于除換行符 \n 之外的任何單字符

  • 二符(貪婪匹配,即匹配盡可能多的字符。因?yàn)橐呀?jīng)盡可能多了,所以結(jié)果至多只有一個。):
以ab為例 以aabaabab為例
.* 盡可能多,哪怕匹配結(jié)果是零次除換行符 \n 之外的任何單字符的也算匹配成功。
.+ 盡可能多,只要匹配結(jié)果是沒達(dá)到至少一次除換行符 \n 之外的任何單字符,就算沒匹配成功
a.*b 它將匹配最長的以a開始,以b結(jié)束的字符串。 它將會匹配到整個字符串a(chǎn)b 它將會匹配到整個字符串a(chǎn)abab
a.+b 它將匹配最長的以a開始,以b結(jié)束,且開頭和結(jié)束之間是不能沒有其他字符的字符串。 它將沒有匹配 它將會匹配到整個字符串a(chǎn)abab
  • 三符(懶惰匹配,即匹配盡可能少的字符。因?yàn)橐呀?jīng)盡可能少了,所以結(jié)果一般都有多個。所以如果成功匹配到一個后,其會繼續(xù)尋找下一個,直至結(jié)束):
以ab為例 以aabaabab為例,會匹配到
.*? 盡可能少,哪怕匹配結(jié)果是零次除換行符 \n 之外的任何單字符的也算匹配成功 我是來占位的。我是來占位的,我是來占位的。我是來占位的,我是來占位的
.+? 盡可能少,只要匹配結(jié)果是沒達(dá)到至少一次除換行符 \n 之外的任何單字符,就算沒匹配成功。
a.*?b 它將匹配最短的以a開始,以b結(jié)束的字符串 它將會匹配到整個字符串a(chǎn)b aab(第一到第三個字符)
aab(第四到第六個字符)
ab(第七到第八個字符)
a.+?b 它將匹配最短的以a開始,以b結(jié)束,且開頭和結(jié)束之間是不能沒有其他字符的字符串。 它將沒有匹配 aab(第一到第三個字符)
aab(第四到第六個字符)

實(shí)際可能舉例及注意:

以"orderId":"aabaabab"為例 注意
".*?" "orderId"
"aabaabab"
"(.*?)" "orderId"
"aabaabab"
()是標(biāo)記一個子表達(dá)式的開始和結(jié)束位置
"orderId":".*?" "orderId":"aabaabab"
"orderId":"(.*?)" "orderId":"aabaabab" ()是標(biāo)記一個子表達(dá)式的開始和結(jié)束位置。
"orderId":"\(.*?\)" 沒有匹配 \(相當(dāng)于檢測括號

附:如果你想驗(yàn)證你的正則表達(dá)式是否正確的話,可以在在線正則表達(dá)式測試上驗(yàn)證。

舉例:

正則表達(dá)式
a.b 可以匹配這些字符串:acb、aeb、a b,但是不匹配aoob。
a.*?xxx 可以匹配 abxxx axxxxx abbbbbxxx

【附5:Sublime Text的控制臺輸入】

編譯運(yùn)行的時候?yàn)閠ools->build,即我們常用的快捷鍵Ctrl+B。這之后底下會出現(xiàn)控制臺。但是這個在控制臺中只能輸出不能輸入。
想要在Sublime Text的"控制臺"實(shí)現(xiàn)輸入,如有時候我們需要輸入密碼,則我們需要安裝SublimeREPL插件。
安裝SublimeREPL步驟:Ctrl+shift+p 鍵入 install packages,再繼續(xù)鍵入 SublimeREPL 安裝即可。
安裝SublimeREPL完后,以后的編譯運(yùn)行的操作當(dāng)你改為:tools->sublimeREPL->python->python-Run current file的時候,其就會出現(xiàn)新的頁面REPL[python],作為新的控制臺,可以輸入輸出互動。
如還不清楚,可查看sublime運(yùn)行python程序的控制臺輸入

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容