python2爬去多玩图库

环境python2

模块requests、urllib、BeautifulSoup、time、json

我爬取的图片是妹子图
网址:http://tu.duowan.com/m/meinv

1.首先是进行网页分析
通过f12对网页进行分析,可以找到套图的网址,点击进入之后,查看网页源代码,没有图片的url。那么他们一定是藏在摸个地方了。我找到了一个网址:=1510133209395”>http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135626&=1510133209395
点进取之后发现这是一个json文件,里面有unicode编码,还有很多的以.jpg结尾的网址,点进网址发现那个就是我想要找到的图片。
目标:获取json
2.我有点击了其他的几个套图,发现规律
=1510133414653”>http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135610&=1510133414653
=1510133209395”>http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135626&=1510133209395
这个网址我不知到怎样才能获取,但是通过观察,我发现前面有很多一样的部分,除了gid和后面的参数不同,gid就是套图的其实网址后面的数字,后面的是一个时间戳,至于怎么发现的,我是从别的地方听来的。
3.用requests模块对这个json网址发出请求,得到json的文本,处理json中的字符串,提取我所需要的部分。

for i in range(0,len(hjson['picInfo'])):
    img_name = hjson['picInfo'][i]['title']     #img的标题
    img_url = hjson['picInfo'][i]['url']        #img的url

4.获取文件后缀
因为很多文件并不是.jpg格式的,所以我要获取文件后缀

pix = img_url.split('/')[-1].split('.')[-1]     #获取后缀

5.创建文件保存路径
这里用到os模块
先创建套图文件夹

gallery_name = hjson['gallery_title']       #套图文件夹
print gallery_name              #打印
os.mkdir(gallery_name)              #创建套图文件夹

完整代码

import urllib
import requests
from bs4 import BeautifulSoup
import time
import json

user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0'
headers = {'User-Agent':user_agent}

def get_html(url):
    #url = 'http://tu.duowan.com/m/meinv'
    data = requests.get(url,headers = headers)
    data.encoding = 'utf-8'
    soup = BeautifulSoup(data.text,'html.parser')
    href_list = []
    for duo in soup.find_all(class_="tags-content"):
        for em in soup.find_all('em'):
            if em.a != None:
                href_list.append(em.a.get('href'))

    return get_gid(href_list)

def get_gid(href_list):
    gid_list = []
    for href in href_list:
        #print href
        pat = re.compile(r'\d+')
        gid = re.search(pat,href)
        #print gid.group()
        gid_list.append(gid.group())

    #print gid_list
    return get_jso(gid_list)

def get_jso(gid_list):
    #http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135823&_=1510117947713
    #                                                                 1510118493946

    jso_url_list = []
    for gid in gid_list:
        jso_url = 'http://tu.duowan.com/index.php?r=show/getByGallery/&gid=%s&_=%s'%(gid,int(time.time()*1000))
        jso_url_list.append(jso_url)

    return get_jso_data(jso_url_list)

def get_jso_data(jso_url_list):
    datas_list = []
    for jso_url in jso_url_list:
        datas = requests.get(jso_url,headers=headers)
        datas.encoding = 'utf-8'

        #print datas.text
        datas_list.append(datas.text)
    #print datas_list
    return get_img_url(datas_list)

def get_img_url(datas_list):
    for data in datas_list:
        hjson = json.loads(data)
        gallery_name = hjson['gallery_title']
        print gallery_name
        os.mkdir(gallery_name)
        for i in range(0,len(hjson['picInfo'])):
            img_name = hjson['picInfo'][i]['title']
            img_url = hjson['picInfo'][i]['url']
            pix = img_url.split('/')[-1].split('.')[-1]
            img_path = '%s.%s'%(img_name,pix)
            local = os.path.join(gallery_name,img_path)
            urllib.urlretrieve(img_url,local)
            print img_path



first_url = 'http://tu.duowan.com/m/meinv'
get_html(first_url)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值