摘要:項目簡介豆瓣相信很多人都爬過,我也把我的方法拿出來交流學習,我也是菜鳥過來的,不會省略代碼,此教程純屬娛樂,大神勿噴。創建數據庫目標網頁分析這個教程中,我們需要爬取豆瓣的電影名序號和相應的評分。
1、項目簡介
豆瓣相信很多人都爬過,我也把我的方法拿出來交流學習,我也是菜鳥過來的,不會省略代碼,此教程純屬娛樂,大神勿噴。
2、工具requests
re
pygal
mysql
Anacond2
3、爬蟲完整代碼# encoding:UTF-8 import re import requests import MySQLdb from bs4 import BeautifulSoup headers = {"User-Agent" :"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"} def getPage(get_url): r=requests.get(get_url) response = r.text return response def filterpage(): pageCode = getPage(get_url) pattern = re.compile("(.*?).*?(.*?).*? ",re.S) items = re.findall(pattern,pageCode) pageStories = [] for item in items: pageStories.append([item[0].strip(),item[1].strip(),item[2].strip()]) return pageStories def save_data(): Dbdata=filterpage() db=MySQLdb.connect(host="localhost",user="root",passwd="******",db="movie",charset="utf8") cursor=db.cursor() for a in Dbdata: id=a[0] name=a[1] grade=a[2] #comment=a[3] value=[id,name,grade] cursor.execute("insert into movie_info values(%s,%s,%s)",value) db.commit() def main(): pageStories=filterpage() #print pageStories for story in pageStories: try: print u"序號:",story[0],u"電影名:",story[1], u" 評分:", story[2] except: pass if __name__ == "__main__": get_url = "https://movie.douban.com/top250/" i=1 while i < 11: main() save_data() print u"頁碼",i num = i * 25 get_url = "https://movie.douban.com/top250?start=" + str(num) + "&filter=" i = i + 14、前期準備
install mysql
我是在windows環境下跑爬蟲的,用的是MySQL5.7,下載地址:https://dev.mysql.com/downloa...
值得一提的是,mysql的安裝,window版的mysql安裝起來說實話還是比較麻煩的,我裝了很久,沒成功,最后選擇下載壓縮版安裝。安裝完之后,在mysql目錄下創建my.ini配置文件,輸入以下代碼:
[mysqld] tmpdir=F:mysql-5.7.18-winx64 # 安裝目錄 datadir=F:mysql-5.7.18-winx64data # data目錄,沒有data目錄請手動創建 early-plugin-load="" skip-grant-tables
點擊保存,data目錄是mysql初始化會用到的目錄,一般是空目錄,不然初始化不通過。特別是“ 服務沒有報告任何錯誤。 請鍵入 NET HELPMSG 3534”錯誤。然后添加mysql的環境路徑。
cmd輸入:
cd F:mysql-5.7.18-winx64in # 進入bin目錄,不然有可能會報錯 mysqld initialize # 初始化命令 net start mysql # 啟動服務
創建數據表,我們需要保存的數據有ID,評分grade,還有電影名name。
mysql>create database movie # 創建movie數據庫 mysql>use movie # mysql>create table movie_info (id varchar(100),name varchar(100),grade decimal(3,1));5、目標網頁分析
這個教程中,我們需要爬取豆瓣top250的電影名、序號和相應的評分。F12分析網頁結構。找到有《肖申克的救贖》的代碼處:
1 # 序號 . . . 肖申克的救贖 # 電影名 . . . # 評分
ok,往后翻,可以看到剩下的都是這類的結構,我們找到規律了,就可以想辦法,把里面的東西給搞出來。
一般常用的有re模塊和beautifulsoup模塊,我是用re模塊正則匹配,感覺正則更強大一點,漂亮湯模塊用起來簡單,但是速度慢。
def getPage(get_url): # 定義一個抓取網頁的方法 r=requests.get(get_url) # get到目標網頁 response = r.text return response # 返回抓取到的網頁
爬蟲開始爬,就是給web服務器一個請求,然后抓取到返回信息。
HTTP 請求方法有 OPTIONS、GET、HEAD、post、PUT、DELETE、TRACE、CONNECT,其中比較常用的有get和post,其他的都不常見,判斷請求方式很重要。自行百度。
6.2 頁面代碼處理def filterpage(): # 頁面處理方法 pageCode = getPage(get_url) #傳參 pattern = re.compile("(.*?).*?(.*?).*? ",re.S) items = re.findall(pattern,pageCode) pageStories = [] # 定義一個空數組,用來存分離出來的數據 for item in items: # 迭代 pageStories.append([item[0].strip(),item[1].strip(),item[2].strip()])# 去除空格 return pageStories
正則表達式,在程序剛開始,我們導入了python的re模塊,這個模塊專門處理正則匹配,詳細教程點這里
我們用第一個(.*?)非貪婪匹配來匹配序號,接著用.*?貪婪匹配匹配不需要的代碼,往后同樣用非貪婪匹配來匹配我們需要的信息。
接著用strip()方法去除空格。返回得到的字符串pageStories。
6.3 數據存儲def save_data(): Dbdata=filterpage() #傳參 db=MySQLdb.connect(host="localhost",user="root",passwd="suyu.123",db="movie",charset="utf8") # 鏈接數據庫 cursor=db.cursor() # 定義游標 for a in Dbdata: # 迭代存儲數據 id=a[0] name=a[1] grade=a[2] value=[id,name,grade] cursor.execute("insert into movie_info values(%s,%s,%s)",value) # sql命令存數據 db.commit() # 別忘記提交變更
python操作mysql,感覺沒啥好講的了。。
6.4主函數def main(): pageStories=filterpage() # 傳參 for story in pageStories: # 迭代打印 try: print u"序號:",story[0],u"電影名:",story[1], u" 評分:", story[2] except: pass
主函數主要是用來打印出我們抓取的數據。
6.5運行程序if __name__ == "__main__": get_url = "https://movie.douban.com/top250/" # 起始網頁 i=1 while i < 11: main() # 運行主函數 save_data() # 運行存儲函數 print u"頁碼",i # num = i * 25 get_url = "https://movie.douban.com/top250?start=" + str(num) + "&filter=" i = i + 1
通過豆瓣top250的頁面分析可以知道,總共有10頁,所以我們設置i<11,整個豆瓣電影top250的網址很有規律,第一頁是:https://movie.douban.com/top250,第二頁就是:https://movie.douban.com/top2...,這樣的網頁有規律,我喜歡,所以我們可以用迭代來表示所有網頁,豆瓣業界良心啊。
7、運行結果GitHub地址:https://github.com/legolas-ze...
還有剩下的svg統計圖,就下次更新吧。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40694.html
摘要:但是感覺還是需要一篇的教程,不然沒有一個總體的認識。修飾器,表示每天會執行一次,這樣就能抓到最新的電影了。不過更推薦使用選擇器。既然前端程序員都使用選擇器為頁面上的不同元素設置樣式,我們也可以通過它定位需要的元素。 雖然以前寫過 如何抓取WEB頁面 和 如何從 WEB 頁面中提取信息。但是感覺還是需要一篇 step by step 的教程,不然沒有一個總體的認識。不過,沒想到這個教程居...
摘要:爬蟲初入前端,剛剛接觸,對于耳聞已久的爬蟲非常神往,所以有了這篇文章,項目代碼在文章末尾需求抓取天涯論壇重慶地區板塊的文章列表信息。 node爬蟲 初入前端,剛剛接觸node,對于耳聞已久的node爬蟲非常神往,所以有了這篇文章,項目代碼在文章末尾 需求 抓取天涯論壇重慶地區板塊的文章列表信息。 使用工具 node.js superagent(客戶端請求代理模塊) cheerio...
摘要:其次,使用后,還需要針對做特定處理。看到這就可以構想一下爬蟲的爬取邏輯了。 運行環境 我的運行環境如下: 系統版本 Windows10。 Python版本 Python3.5,推薦使用Anaconda 這個科學計算版本,主要是因為它自帶一個包管理工具,可以解決有些包安裝錯誤的問題。去Anaconda官網,選擇Python3.5版本,然后下載安裝。 IDE 我使用的是PyCharm,是專...
閱讀 2786·2021-11-22 14:45
閱讀 2925·2021-09-10 11:26
閱讀 3231·2021-09-07 10:18
閱讀 2219·2019-08-30 14:08
閱讀 617·2019-08-29 12:22
閱讀 1393·2019-08-26 13:48
閱讀 2535·2019-08-26 10:24
閱讀 1150·2019-08-23 18:35