Python 爬取周杰伦 instagram-阿里云开发者社区

开发者社区> 李杰米> 正文

Python 爬取周杰伦 instagram

简介:
+关注继续查看

整体框架

使用国内能访问的某国外 app angine 爬取Jay的 Instagram 并显示,再使用国内的 sae 访问这个网站,再爬取一次并发送到微博小号。

bs4

使用requests爬取 Instagram 时候,并没有加request header,Instagram 对 robot 还算友好,直接返回不带 js 的网页信息。通过bs4迅速定位到照片、视频信息,再用正则表达式提取到链接并下载、显示。,正则表达式让人头痛,使用str.split(' ')来使字符串变成列表。

from bs4 import  BeautifulSoup

filepath = '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 数据库操作
数据库对象

class photo(db.Model):
    __tablename__ = "photoid"

    id = db.Column(db.Integer)  #参数  primary_key=True 表示此键值不能重复,必须有一个primary_key=True。
    url = db.Column(db.String(4096),primary_key=True )
    text = db.Column(db.String(4096))

    def __init__(self, id, url,text):
        self.id = id
        self.url = url
        self.text = text #这里有三个行

关于创建、查找


In [1]: import flask_app

In [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]: 1

In [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 re

s = 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].contents
    ls1 = 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 不重复 且不是video
        rt.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 rt
    else :
        rt.append(False)
        return rt

其中pid上次执行时候最新一张图片的id,用来判断是否有更新。其实这里bs4对我的帮助并不大。上面程序只做到了保存最新的一张图片(jay.jpg),实测中,总是保存第二张图片,可能是正则表达式的问题。不影响功能,不再深究了。
使用 json 精准定位N次,(注意到js变量)

发微博参见 微博API 学习记录

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
与数据隐私相关的 AI 关键问题
  本文最初发表在 Towards Data Science 博客,经原作者 Alexandros Zenonos 授权,InfoQ 中文站翻译并分享。   隐私不仅是与人工智能有关的问题,也是任何与数据相关的领域普遍关注的问题。隐私是关于人们对其个人数据和基于这些数据所做的决定的控制。
5 0
管理系统中风险是系统可用性和可扩展性的关键(4)
管理系统中风险是系统可用性和可扩展性的关键(4)
4 0
JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?
  在过去的几年里,我有机会尝试了多种不同的编程语言。   我非常喜欢学习不同的语言、方法和范式。我是一个充满好奇心的人,一直对编程语言十分着迷。每种编程语言都是不同的,在本文中,我们来讨论一下以下五大编程语言的优点以及缺点。
3 0
亚信数据新一代PaaS平台是如何炼成的?
  日前,亚信数据发布旗下多款PaaS产品,包括亚信分布式数据库ADB、容器云计算平台HPS、大数据云平台DCP。这三款产品在亚信内部历经了3年的研发投入和攻关,并在客户项目中得到了实践部署。随着这些系列产品的正式亮相,它们共同构建了亚信完整的PaaS平台解决方案,将亚信拥有的大数据、CRM(客户关系管理系统)、BOSS(业务运营支撑系统)以及众多核心能力逐渐服务化、组件化,由该平台统一承载。
6 0
用阿里云飞天计划提供的CES服务器为高中生活搭建“故事簿”网页
一名刚踏入大学的大一本科生利用阿里云提供的CES服务器为高中“故事簿”搭建网页
13 0
Android WebSocket即时通信
  HTTP与WebSocket响应方式区别   WebSocket存在的理由   我们已经有了 HTTP 协议,为什么还需要另一个协议?因为只靠Http通信有一个缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,服务端想主动通知客户端,就难以实现。因此,工程师们一直在思考,有没有更好的方法,而 WebSocket 就是这样诞生的。
3 0
阿里巴巴数据库分库分表的实践(1)
阿里巴巴数据库分库分表的实践(1)
3 0
阿里云飞天加速计划
阿里云服务器是一个非常好的学习平台,我们定会用来提升自身的专业能力。
8 0
互联网创业公司的技术团队构建
互联网创业公司的技术团队构建
6 0
+关注
李杰米
数据库python技术专家
25
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载