python 版本 :3.5.2
Jupyter Notebook
使用庫:
reuqests (For human)
json (用來加載JSON數據)
datetime (用來記錄抓取所花時間,也可以忽略)
pymysql (連接數據庫,載入所爬取數據 )
1.用chrome瀏覽器打開網貸之家官網:http://www.wdzj.com 然后使用Chrome工具審查元素,勾選 Preserve log 然后刷新一次頁面

2.找到 http://www.wdzj.com/wdzj/html/json/dangan_search.json 也就是說網貸之家將所收集在檔的平台以JSON形式數據儲放的,這下就很好辦了,直接用抓取這個頁面就ok

3.上簡單粗暴的代碼
1 1 #coding utf-8 2 2 import requests 3 3 import json 4 4 import datetime 5 5 import pymysql 6 6 user_agent = 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)' #用來偽裝用戶身份 7 7 headers = {'User-Agent':user_agent} 8 8 p2plist_url='http://www.wdzj.com/wdzj/html/json/dangan_search.json' #剛剛找到用來存放平台的JSON數據頁面 9 9 print ('正在抓取……') 10 10 s1=datetime.datetime.now() 11 11 r=requests.get(p2plist_url) 12 12 content=r.text 13 13 content=json.loads(content) #加載JSON數據 14 14 s2=datetime.datetime.now() 15 15 s3=(s2-s1).total_seconds() 16 16 print ('抓取完成^\n共用時%s秒' % round(s3))
查看一下結果

接着連接數據庫,把數據丟到數據庫里面去(pymsql 庫, 需要先下載,打開CMD 然后輸入 ’pip install pymysql‘ 下載庫)
1 con=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd=None,db='quan') #連接數據庫 2 cur=con.cursor() #創建游標 3 create_table='create table wdzj (id smallint,name varchar(20),pin varchar(20))' #創建一個數據庫用來存儲數據 4 try: 5 cur.execute(create_table) 6 con.commit() 7 print ('創表成功') 8 except Exception as e: 9 print ('創表失敗\n%s ' % e) 10 con.rollback 11 #插入數據語句 12 for x in content: 13 sql="insert into wdzj (name,id,pin) values ('%s','%d','%s') " % (x['platName'],x['platId'],x['platPin']) 14 try: 15 cur.execute(sql) 16 con.commit() 17 print ('插入成功 %s %s %s'% (x['platName'],x['platId'],x['platPin'])) 18 except Exception as e: 19 print ('插入錯誤\n%s ' % e) 20 con.rollback 21 cur.close() #關閉游標 22 con.close() #關閉連接
查看一下結果

進行查詢:條件為查詢存儲到數據庫中,平台名稱為'介貸網'的信息。ps:小小的一波推薦,玩P2P的,這個平台雖然小,但還不錯。

完成!
學習過程中所遇到的問題:
1.第一次連接數據庫儲存數據,花了很長時間去琢磨插入語句,因為操作及邏輯思維固化的原因,剛開始將數據庫語言寫成cur.execute('*******'),但因為基礎不扎實,硬是寫不好,后來想到了,不如先寫好數據庫語句,將它作為一個對象寫進執行數據庫語句的cur.execute('*******')里面去。
2.遇到了'latin-1' codec can't encode characters in position 40-42: ordinal not in range(256) 的問題,查了一下百度,雖然得到了很幾種解決方案,還記得最簡單粗暴的就是:encode('utf-8')一下,然后decode('latin-1')一下,簡直太粗暴,我也嘗試做了一下,發現插進入的數據全特么是亂碼,摒棄。后來找到了,原來是數據庫的編碼設置問題,后來在連接數據庫的時候加上了 charset="utf8" 完美解決
3.記得con.commit()否則,執行的插入語句是沒有用的,因為沒有提交到數據庫 ,它的伙伴con.rollback() 是用來回滾的。打個比方,屌絲去追女神(數據庫),送花(操作,增刪改),別人妹子接受了你的花,那么就(con.commit()),不接受,那么你就滾吧(con.rollback()),
還有cur.close() 和con.close(),養成良好的習慣,操作完成后記得關閉連接
總結:
神馬?函數封裝都木有?哈哈,簡單粗暴,夠用,但是不靈活,之后會進行改進,一步一步前進~
QQ:1749061919 小白爬蟲求帶
