爬蟲之爬取網貸之家在檔P2P平台基本數據並存入數據庫


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 小白爬蟲求帶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM