python爬取周杰伦歌词_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'}}]

"""

保存图片

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

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]:

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]:

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变量)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解锁网络数据的宝藏:Python虫工具与教程集合 一、探索网络信息的无限宝藏 在互联网的海洋中,蕴藏着海量的有价值信息。如何合法、高效地获这些信息?Python虫工具与教程为您揭开这一神秘面纱。通过这些资源,您可以轻松地网站信息,提所需内容,为各种应用场景提供强大的数据支持。 二、资源亮点 工具齐全:提供一系列功能强大的Python虫工具,满足您不同场景下的需求。 教程详尽:配套的Python虫教程,从基础到进阶,让您逐步掌握虫的核心技术。 合法合规:严格遵守法律法规和网站使用协议,确保采集行为合法,尊重网站权益。 实战项目:结合实际案例,让您在实践中掌握Python虫的运用,真正做到学以致用。 三、适用人群 无论您是数据分析师、网络开发者还是对Python虫感兴趣的爱好者,这些资源都将为您的学习和实践提供有力的支持。 四、使用建议 按需选择工具与教程:根据实际需求选择合适的工具和教程,确保学习与实践的有效性。 遵守法律法规与协议:在使用这些资源进行活动时,务必遵守相关法律法规和网站的使用协议。 持续学习与更新:随着网络技术的不断进步,Python虫技术也在不断发展。建议您持续关注相关动态,提升自己的技能水平。 五、安全与责任 尊重网站权益:避免对目标网站的正常运行造成干扰或损害,合理使用资源。 隐私保护:在采集数据时,严格遵守隐私保护法规,不泄露或滥用用户个人信息。 风险防范:了解并应对潜在的网络威胁,采相应措施降低风险。 感谢您选择我们的Python虫工具与教程集合!让我们一起挖掘网络信息的宝藏,为您的工作和研究注入新的活力!请务必遵守法律法规和网站使用协议,共同维护网络数据的合法采集与利用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值