畢設是做爬蟲相關的,本來想的是用java寫,也寫了幾個爬蟲,其中一個是爬網易雲音樂的用戶信息,爬了大概100多萬,效果不是太滿意。之前聽說Python這方面比較強,就想用Python試試,之前也沒用過Python。所以,邊爬邊學,邊學邊爬。廢話不多說,進入正題。
1.首先是獲取目標頁面,這個對用python來說,很簡單
#encoding=utf8
import urllib res = urllib.urlopen("http://www.baidu.com") print res.read()
運行結果和打開百度頁面,查看源代碼一樣。這里針對python的語法有幾點說明。
a).import 就是引入的意思,java也用import,C/C++用的是include,作用一樣
b).urllib 這個是python自帶的模塊,在以后開發的時候,如果遇到自己需要的功能,python自帶的模塊中沒有的時候,可以試着去網上找一找,比如需要操作MySql數據 庫,這個時候python是沒有自帶的,就可以在網上找到MySQLdb,然后安裝引入就行了。
c).res是一個變量,不用像java,C語言那樣聲明。用的時候直接寫就行了
d).標點符號。像java,C這些語言,每行代碼后面都要用分號或者別的符號,作為結束標志,python不用,用了反了會出錯。不過有的時候,會用標點符號,比如冒號, 這個后面再說
e).關於print,在python2.7中,有print()函數,也有print 語句,作用基本差不多。
f).#注釋
g).encoding=utf8代表使用utf8編碼,這個在代碼中有中文的時候特別有用
2.解析獲取的網頁中的元素,取得自己想要的,以豆瓣為例,我們想獲取這個頁面中的所有書籍名稱(僅供學習交流)
http://www.douban.com/tag/%E5%B0%8F%E8%AF%B4/?focus=book
首先獲取頁面代碼:
#encoding=utf8 import urllib res = urllib.urlopen("http://www.douban.com/tag/%E5%B0%8F%E8%AF%B4/?focus=book") print res.read()
獲取結果,通過分析頁面源代碼(建議用firefox瀏覽器,按F12,可看到源代碼),可以定位到有效代碼如下:
下面我們開始解析(這里用BeautifulSoup,自行下載安裝),基本流程:
a).縮小范圍,這里我們通過id="book"獲取所有的書
b).然后通過class="title",遍歷所有的書名。
代碼如下:
#encoding=utf8 import urllib import BeautifulSoup res = urllib.urlopen("http://www.douban.com/tag/%E5%B0%8F%E8%AF%B4/?focus=book") soup = BeautifulSoup.BeautifulSoup(res) book_div = soup.find(attrs={"id":"book"}) book_a = book_div.findAll(attrs={"class":"title"}) for book in book_a: print book.string
代碼說明:
a).book_div 通過id=book獲取div標簽
b).book_a 通過class="title"獲取所有的book a標簽
c).for循環 是遍歷book_a所有的a標簽
d).book.string 是輸出a標簽中的內容
結果如下:
3.存儲獲取的數據,比如寫入數據庫,我的數據庫用的Mysql,這里就以Mysql為例(下載安裝MySQLdb模塊這里不做敘述),只寫怎么執行一條sql語句
代碼如下:
connection = MySQLdb.connect(host="***",user="***",passwd="***",db="***",port=3306,charset="utf8") cursor = connection.cursor() sql = "*******" sql_res = cursor.execute(sql) connection.commit() cursor.close() connection.close()
說明:
a).這段代碼是執行sql語句的流程,針對不同的sql語句,會有不同的處理。比如,執行select的語句,我怎么獲取執行的結果,執行update語句,怎么之后成沒成功。這 些就要自己動手了
b).創建數據庫的時候一定要注意編碼,建議使用utf8
4.至此,一個簡單的爬蟲就完成了。之后是針對反爬蟲的一些策略,比如,用代理突破ip訪問量限制
聲明:
代碼僅供學習交流使用,不能用於惡意采集、破壞等不良行為,出問題概不負責
如有問題,歡迎指正。
轉載請注明出處。