本文章包含內(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 --version或python -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的支持】

三、網(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文件中。

四、初探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程序的控制臺輸入





