【爬蟲一】最簡單的爬蟲,零基礎教學
爬蟲在大數據時代佔據了重要的位置,在網上有大量的公開數據可以輕鬆獲取。
爬蟲入門其實非常簡單,就算你是編程小白,也可以輕鬆爬下一些網站。下面就以爬取筆者的個人博客網站(大數據分析@唐松)為例,教大家學會一個簡單的爬蟲。。一方面,由於這個網站的設計和框架不會更改,因此本書的網路爬蟲代碼可以一直使用; 另一方面,由於這個網站由筆者擁有,因此避免了一些法律上的風險。
如果你有已經安裝了python3,pip,可以跳過下面對python,pip安裝的介紹。
1. 安裝python3, pip, beautifulsoup
第一步:Python3安裝,請自行百度 Anaconda。這裡推薦使用 Anaconda 的 Python 科學計算環境。只需像普通軟體一樣安裝好 Anaconda,就可以把 Python 的環境變數、解釋器、開發環境等安裝在計算機中。
第二步:安裝pip,pip是按照python各種包的工具,有了它安裝python的各種包都很方便。可以借鑒這篇文章:http://www.tuicool.com/articles/eiM3Er3/
第三步:有了pip,就可以安裝beautifulsoup了。這個包可以很好地從網頁代碼中提取想要的數據。安裝方法: 在 terminal (MacOS) 或是 cmd (Windows)中鍵入
pip install bs4
第四步:選一個python編譯器來跑程序。為了代碼的調試方便,可以直接用 Anaconda 中的 jupyter。使用方法:在 terminal (MacOS) 或是 cmd (Windows)中鍵入
jupyter notebook
2. 第一步:獲取整個頁面
#!/usr/bin/python# coding: utf-8import requestslink = "http://www.santostang.com/"headers = {User-Agent : Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6} r = requests.get(link, headers= headers)print (r.text)
上述代碼獲取了博客首頁的網頁HTML代碼。首先import requests,使用requests.get(link, headers=headers)獲取了網頁。值得注意的是:
1. 用requests的headers可以偽裝成瀏覽器訪問
2. r是requests的Response回復對象,我們從中可以獲取我們想要的信息。r.text是獲取的網頁內容代碼。
運行完上述代碼後,我們得到的結果是:
3. 第二步:提取需要的數據
#!/usr/bin/python# coding: utf-8#!/usr/bin/python# coding: utf-8import requestsfrom bs4 import BeautifulSoup #從bs4這個庫中導入BeautifulSouplink = "http://www.santostang.com/"headers = {User-Agent : Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6} r = requests.get(link, headers= headers)soup = BeautifulSoup(r.text, "lxml") #使用BeautifulSoup解析這段代碼title = soup.find("h1", class_="post-title").a.text.strip()print (title)
用beautifulsoup對爬下來的頁面進行解析,接下來就是用soup的語法,得到搜索結果第一間shop的名稱,並列印出來。關於beautifulsoup的語法,可以查看:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
因為中文解碼的問題,要列印出中文,所以在code的最開始加上了
import sysreload(sys)sys.setdefaultencoding(utf-8)
那麼怎麼找到這個店名在HTML里的哪裡呢?這裡用到了Chrome中「審查元素功能」
打開之後,點擊想要的數據,下面的Elements就會出現相應的code所在的地方。
4. 保存數據到本地文件
#!/usr/bin/python# coding: utf-8import urllib2from bs4 import BeautifulSoupimport sysreload(sys)sys.setdefaultencoding(utf-8)link = "http://www.dianping.com/search/keyword/7/0_%E6%BD%AE%E6%B1%95%E7%89%9B%E8%82%89"headers = {User-Agent : Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6} request = urllib2.Request(link,headers=headers)response = urllib2.urlopen(request)page = response.read()soup = BeautifulSoup(page, "lxml")shop = soup.find("div", class_="tit").a.h4.text.strip()print shopwith open(C:/Users/administrator/Desktop/shop.txt, "a+") as f: f.write(shop) f.close()
在原有的基礎上,再三行代碼,把這個字元串,保存在text里,並存到本地。
注意把文件地址改成自己電腦的地址。
5. 後記
這只是第一家店,如果要爬下這個頁面的所有店鋪,加上循環就可以了。
推薦閱讀:
※請問python中int的意思?
※python抓取新浪微博,求教!!?
※使用爬蟲如果不是用來為機器學習或數據挖掘收集數據,還能做什麼有趣的事情呢……?
※Python 爬蟲進階?
※請問爬蟲如何爬取動態頁面的內容?