Python 爬取周杰伦instagram
整體框架
使用國內能訪問的某國外 app angine 爬取Jay的 Instagram 并顯示,再使用國內的 sae 訪問這個網站,再爬取一次并發送到微博小號。
bs4
使用requests爬取 Instagram 時候,并沒有加request header,Instagram 對 robot 還算友好,直接返回不帶 js 的網頁信息。通過bs4迅速定位到照片、視頻信息,再用正則表達式提取到鏈接并下載、顯示。,正則表達式讓人頭痛,使用str.split(' ')來使字符串變成列表。
from bs4 import BeautifulSoupfilepath = 'C:\Users\hndx\Desktop\ins.html' soup = BeautifulSoup(open(filepath),'lxml')script = soup.select('script')print str(script[2]).split('},{"node":')[1]通過分析ins.html,得到每個node就是一個動態。這樣str(script[2]).split('},{"node":')[1]就是帶有Jay最新動態信息的 Unicode 字符了。應用json 直接將這個信息轉化成字典dict,如下
import json i = json.loads(info) print i["edge_media_to_caption"]['edges'] """ [{u'node': {u'text': u'Just finished now \u8b1d\u8b1d\u91d1\u83ef\u7684\u670b\u53cb\u5011 high\u7684\u4e0d\u8981\u4e0d\u8981\u7684 #\u91d1\u83ef #\u96d9\u7bc0\u68cd#\u96d9\u622a\u68cd'}}] """保存圖片
參考 :如何用requests優雅的下載圖片? ,這個應該是最簡潔的答案了。
import requests s = requests.session() ss = s.get('https://www.baidu.com/img/bd_logo1.png') open('logo.png', 'wb').write(ss.content)數據庫 ORM Flask-SQLAlchemy
學習參考 Flask-SQLAlchemy 官方文檔
有關增刪改查的操作 flask SQLAlchemy 數據庫操作
數據庫對象
關于創建、查找
In [1]: import flask_appIn [2]: con = ['1','2']In [3]: flask_app.photo(con[0],con[1]) Out[3]: <flask_app.photo at 0x7fa109b5ccd0>In [4]: flask_app.db.session.add(flask_app.photo(con[0],con[1]))In [5]: flask_app.db.session.commit()In [6]: flask_app.photo.query.filter_by(id='1').first() Out[6]: <flask_app.photo at 0x7fa11179e890>In [7]: p1 =flask_app.photo.query.filter_by(id='1').first()In [8]: p1.id Out[8]: 1In [9]: p1.url Out[9]: u'2'Mysql 用到的語句
DROP TABLE table_name ;
刪除數據表
insta.py
# -*- coding: utf-8 -*- """ insta 爬蟲 Created on Fri May 04 09:02:26 2018@author: aubucuo """ import requests from json import loads from bs4 import BeautifulSoup import res = requests.session() u = 'https://www.instagram.com/jaychou/'def ins(pid):rt = []c1 = s.get(u)soup = BeautifulSoup(c1.content,'lxml')script = soup.select('script')ls = script[2].contentsls1 = re.findall('window._sharedData = (.+?);', str(ls[0]))js = loads(ls1[0])['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges']j_id = js[0]['node']['id']is_video =js[0]['node']['is_video']j_url = js[0]['node']['display_url']j_text = js[0]['node']['edge_media_to_caption']['edges'][0]['node']['text']if j_id!= pid and not is_video: #如果id 不重復 且不是videort.append(True)rt.append(j_id)rt.append(j_url)rt.append(j_text)c2 = s.get(j_url)open('mysite/static/jay.jpg', 'wb').write(c2.content)return rtelse :rt.append(False)return rt其中pid是上次執行時候最新一張圖片的id,用來判斷是否有更新。其實這里bs4對我的幫助并不大。上面程序只做到了保存最新的一張圖片(jay.jpg),實測中,總是保存第二張圖片,可能是正則表達式的問題。不影響功能,不再深究了。
使用 json 精準定位N次,(注意到js變量)
發微博參見微博API 學習記錄
轉載于:https://www.cnblogs.com/aubucuo/p/Jay.html
總結
以上是生活随笔為你收集整理的Python 爬取周杰伦instagram的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: S7-1200 PLC,如何调试电机运行
- 下一篇: NetWare是什么(网关的作用是什么)