標籤:

Mac下使用python

這學期選修的關於內容安全和數據挖掘的課程,於是作者本人終於開始接觸python(大三才開始學python的我錯了,不要打我)

關於爬蟲

百度官方解釋:網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。

關於python

Python是純粹的自由軟體, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議。Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進。

關於python的安裝

ps:mac系統自帶python,不過版本不超過3,所以建議重新安裝

檢查python版本的方法:

打開終端,直接輸入python,就會顯示python的版本

安裝python的方法:

mac版指路:

【Python入門課】最容易聽懂的 Python 零基礎入門課_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili?

www.bilibili.com圖標

win版指路:

【Python入門課】最容易聽懂的 Python 零基礎入門課_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili?

www.bilibili.com圖標

如何運行python

由於作者本人用的是mac系統,這裡就說一下如何在mac OX中運行python(至於如何在win下我就不多說了,目前win對我來說就只有word和微軟家的vs還可以用一用)主要有以下三種方法:

(1)安裝一個sublime,方便快捷

(2)使用mac自帶的終端

(3)安裝一個PyCharm

方法一指路:

如何安裝sublime:

sublime下載網址:A sophisticated text editor for code, markup and prose

選擇適合你的版本下載

如何破解:

sublime text 安裝以及配置 | Celia『s blog

如何配置python3:

打開sublime text,工具——》編譯系統——〉編譯新系統

使用Sublime Text 開發Python如何配置環境(mac)

編譯:command+B

方法二:

打開終端,利用cd找到py文件所在位置,然後輸入python3 文件名稱+回車

方法三指路:

如何安裝PyCharm:

直接給下載網址別的就不廢話了:PyCharm: Python IDE for Professional Developers by JetBrains

如何破解PyCharm:

這個網上一堆,自己動手豐衣足食。

Ps:雖然安裝了PyCharm,但是目前我還沒有怎麼用過,感覺有點重量級,對於目前我覺得Mac的終端就很好用。。。。

如何用python進行簡單的頁面抓取

事例:

url:

http://www.phei.com.cn

此鏈接為電子工業出版社的官方鏈接

任務:

對指定的鏈接進行數據抓取

提前準備:

(1)安裝pip:打開終端,輸入:sudo apt - get install python3 - pip

(2)安裝requests:打開終端,輸入:sudo pip3 install requests

代碼:

import requests
urls_dict = {
電子工業出版社:http://www.phei.com.cn,
在線資源:http://www.phei.com.cn/module/zygl/zxzyindex.jsp,
xyz:www.phei.com.cn,
網上書店1:
http://www.phei.com.cn/module/goods/wssd_index.jsp,
網上書店2:
http://www.phei.com.cn/module/goods/wssd_index.jsp
}

urls_lst = [
(電子工業出版社,http://www.phei.com.cn/),
(在線資源,http://www.phei.com.cn/module/zygl/.jsp),
(xyz,www.phei.com.cn),
(網上書店1,
http://www.phei.com.cn/module/goods/wssd_index.jsp),
(網上書店2,
http://www.phei.com.cn/module/goods/wssd_index.jsp),
]

crawled_urls_for_dict = set()
for ind,name in enumerate(urls_dict.keys()):
name_url = urls_dict[name]
if name_url in crawled_urls_for_dict:
print(ind,name,已經抓取過了)
else:
try:
resp = requests.get(name_url)
except Exception as e:
print(ind,name,:,str(e)[0:50])
continue
content = resp.text
crawled_urls_for_dict.add(name_url)
with open(bydict_+name+.html,w,encoding=utf8) as f:
f.write(content)
print("抓取完成:{}{},內容長度為{}".format(ind,name,len(content)))
for u in crawled_urls_for_dict:
print(u)

print(-*60)

crawled_urls_for_list = set()
for ind,tup in enumerate(urls_lst):
name = tup[0]
name_url = tup[1]
if name_url in crawled_urls_for_list:
print(ind,name,"已經抓取過了")
else:
try:
resp = requests.get(name_url)
except Exception as e:
print(ind,name,:,str(e)[0:50])
continue
content = resp.text
crawled_urls_for_list.add(name_url)
with open(bylist_+name+.html,w,encoding=utf8) as f:
f.write(content)
print("抓去完成:{}{},內容長度為{}".format(ind,name,len(content)))
for u in crawled_urls_for_list:
print(u)

分析:

這段代碼演示了兩種抓取方式:

(1)將待抓取的目標信息組織成字典,名為urls_dict

(2)將待抓取的目標信息組織成列表,名為urls_lst

我們在分別看一下具體的方式:

(1)使用鍵來表示目標的名字,相應的值表示抓取目標的網址。

字典中包含5個目標信息,其中「網上書店1」和「網上書店2」的網址信息是相同的;

鍵為「xyz」的項是特意加上去的,注意網址和其他網址的區別,即沒有「http://」作為前綴,對於requests庫來說事無效的網址,抓取時拋出異常。這也是引入該項的目的,可演示抓取時異常處理的情況。

(2)列表的元素事元組,使用元組來表示目標信息。每個元組包含兩個元素:

  • 第一個元素是抓取目標的名稱
  • 第二個元素是抓取目標的網址
  • 列表中共有5個元組,表示的內容信息與urls_dict中的完全一樣

使用兩種方式組織信息的主要目的是演示使用for循環結構對不同數據類型的遍歷方法,在實際過程中使用列表的情況會更多一些。

結果:

參考:

百度詞條:網路爬蟲

百度詞條:python

參考書籍:python數據抓取技術與實踐(電子信息出版社)

封面圖:by 伊吹五月

推薦閱讀:

TAG:Python | Mac | 科技 |