Python爬虫: 单网页 所有静态网页 动态网页爬取

Python爬虫: 单网页 所有静态网页 动态网页爬取

前言:所有页代码主干均来自网上!!!感谢大佬们。

其实我对爬虫还挺感兴趣的,因为我玩instagram(需要科学上网),上过IG的人都知道IG虽然是个晒图APP,但是它的图不管是手机端还是网页端都是不提供下载的,连右键另存为都没有。当然,稍微懂一点计算机的在网页端翻翻源码找找下载链接也是能下载,但对大众来说,看到好看的图,又不能下载是一件很讨厌的事。

之前我是怎么下的呢,我先把PO文地址发给inskeeper微信公众号,然后对面就会返回图给我。

这次老师让我们做爬虫,我一下就想到了这件事,公众号能够根据链接给我返图,很明显是服务器端根据链接用爬虫把图爬了下来。我就想自己写一个爬虫,也能给个链接把图爬下来。而且,我还想更方便一点,给个某个人的IG首页地址,我就自动把他发过的所有图片和视频都一次性打包下载下来,想想就很爽啊。代码就是懒人的天堂,要是什么事都能一次码几行代码,以后千年万年再遇到这事打开运行一下就完事,那世界多美好啊!

我这次做的是爬图:

  • 爬虫1.0:爬取百度贴吧帖子某一页的所有图片(小图–>原图)
  • 爬虫2.0:爬取百度贴吧某一个帖子所有页面的所有图片(静态单页–>静态多页)
  • 爬虫3.0:爬取Instagram某PO主的所有历史图片和视频(静态网页–>动态网页(json瀑布流网页))

至于,用开发者模式写爬虫的基本姿势、静态多页怎么爬,动态瀑布流网页又怎么爬请自行参考Refenrence中链接网址,百度贴吧的源码我不记得是来自哪个网址了= = 如果原作者看到求原谅!!在评论备注吧感激不尽!!

我的代码主干基本来自大佬们的博客,只是做了增加或者改动,其中IG爬取的代码改动较大,我将POST方式改为了PUT方式,POST以及不能得到Json了。

这个是第一次写(改= =)Python,代码结构乱请原谅…比较久远的代码懒得改了= =

爬虫1.0:爬取百度贴吧帖子某一页的所有图片(小图–>原图)

很简单,自行读代码+百度。忘了大佬原博客真的抱歉= =

这里我做到改动是,将小图链接进一步爬取转换成了大图链接。

源码如下:GitHub下载:BaiduBarOnePageCrawler.py

#!/usr/bin/python
# coding:utf-8
# 实现一个简单的爬虫,爬取贴吧/图库图片
import requests
import re

# 根据url获取网页html内容
def getHtmlContent(url):
    page = requests.get(url)
    return page.text

# 从html中解析出所有jpg图片的url
# 百度贴吧html中jpg图片的url格式为:<img ... src="XXX.jpg" width=...>
def getJPGs(html):
    # 解析jpg图片url的正则
    jpgs = []
    print(jpgs)
    #https: // www.instagram.com / p / BgfjlvlDg4H /?taken - by = tee_jaruji
    jpgReg1 = re.compile(r'"shortcode":"(.+?)"')
    print(jpgReg1)
    jpgs1 = re.findall(jpgReg1, html)
    print(jpgs1)
    for url1 in jpgs1:
        print('https://www.instagram.com/p/'+url1+'/?taken-by=tee_jaruji')
        html = getHtmlContent('https://www.instagram.com/p/'+url1+'/?taken-by=tee_jaruji')
        #750w,https://scontent-nrt1-1.cdninstagram.com/vp/cdb59589c0f5abc42a923bf73b5506d0/5B36AA4F/t51.2885-15/e35/29415875_200094744088937_5818414838958784512_n.jpg 1080w"
        #print(html)
        jpgReg2 = re.compile(r'750.+?{"src":"(https://.+?\.jpg)","config_width":1080')
        print(jpgReg2)
        jpgs2 = re.findall(jpgReg2,html)
        print(jpgs2)
        if len(jpgs2)!=0:
            jpgs.append(jpgs2[0])
    print(jpgs)
    return jpgs

# 用图片url下载图片并保存成制定文件名
def downloadJPG(imgUrl,fileName):
    # 可自动关闭请求和响应的模块
    from contextlib import closing
    with closing(requests.get(imgUrl,stream = True)) as resp:
        with open(fileName,'wb') as f:
            for chunk in resp.iter_content(128):
                f.write(chunk)

# 批量下载图片,默认保存到当前目录下
def batchDownloadJPGs(imgUrls,path = './img/'):
    # 用于给图片命名
    count = 1
    for url in imgUrls:
        print(url)
        downloadJPG(url,''.join([path,'{0}.jpg'.format(count)]))
        print('下载完成第{0}张图片'.format(count))
        count = count + 1

# 封装:从百度贴吧网页下载图片
def download(url):
    html = getHtmlContent(url)
    #print(html)
    jpgs = getJPGs(html)
    batchDownloadJPGs(jpgs, './img/')

def main():
    url = 'https://www.instagram.com/tee_jaruji/'
    download(url)

if __name__ == '__main__':
    main()

爬虫2.0:爬取百度贴吧某一个帖子所有页面的所有图片(静态单页–>静态多页)

这个爬虫总共100行左右,一般是我后来加的注释,也就是说代码50行。

代码函数关系如下:

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值