python通过网站主页面获得照片

怎么通过主页面的超链接来获取这个网站的照片呢?这里以23730为例子

接下来我们分析一下编写的过程:

第一步:在目录页面得到所有主页面的url

第二步:把这个url放在列表中

第三步:得到照片的url链接放到一个列表中

第四步:得到照片的名字放到一个列表中

第五步:将照片url的列表遍历并且发送request请求,写入文件。

并且文件的名字为照片名字


所以定义4个函数:

defget_content_url(list_con):

这个函数的任务就是得到目录下的所有url

defget_pic_url(List_pic,html):

这个函数的任务是得到所有的照片链接

defget_pic_name(List1_name,html):

得到照片的名字

defwrite_pic(List,List1):

将照片下载到文档中,并且文件的名字就是照片的名字

最后定义一个main函数用来调用所有的函数。

好了,开始第一个函数的编写:


def get_content_url(list_con):
url='http://www.27270.com/tag/63.html'#这是我要下载照片网站的主页url
    html=requests.get(url)
    html.encoding='gbk'#将编码该为GBK是为了获取接下来的中文做准备
    soup=BeautifulSoup(html.text,'lxml')
    con_url=soup.find_all('a')
    j=0
    for i in con_url:#j用来计数,当j的值为30的时候退出这个循环,
                      #因为这个目录有40个照片而我只需要前面30个
        try:
            href=i['href']
            if'http://www.27270.com/ent/meinvtupian/'in href and '.html'in href:#因为最主要的图片的url要满足这2个条件
                print(href)
                list_con.append(href[0:48])’’’我只需要他的url而不需要别的东西,href[0:48]就是把他的url给截取出来’’’
                j=j+1
        except:
            continue
        if(j==30):
            Break

Ok,第一个函数做完了接下来就是制作得到所有照片链接的函数了

def get_pic_url(List_pic,html):
    soup=BeautifulSoup(html,'lxml')
    src=soup.find_all('img')#找所有的img形式的照片
    try:
        for i in src:
            link=i['src']#找src属性的链接
            if'http://t2.hddhhn.com/uploads/tu/'and '9999'in link:#这是我要的照片的条件
                List_pic.append(link)
    except:
        print('错误')

接下来得到照片的名字

def get_pic_name(List1_name,html):
    soup=BeautifulSoup(html,'lxml')
    title=soup.find_all('h1',class_="articleV4Tit")
    name=''.join('%s' %i for i in title)#将列表里面的东西字符化,不然用不了replace
    name=name.replace('h1','')#将一些杂七杂八的东西丢掉
    name=name.replace('class="articleV4Tit"','')
    name=name.replace('</>','')
    name=name.replace('< >','')
    List1_name.append(name)#最后放到列表中

好了,接下来就是设置写入函数了

def write_pic(List,List1):
    for i in range(len(List)):#之所以不用for i in List 是为了接下来的提示
        try:
            html=requests.get(List[i])
            with open(List1[i]+'.jpg','wb') as f:
                f.write(html.content)
                print('第%d张写入成功'%i)#这就是为什么不用for i in List
                f.close()
        except:
            print('第%d张写入失败'%i)
            continue
        
return ''

Now,就让我们开始编写主函数main()

def main():
    list_pic=[]
    list_name=[]
    list_con=[]
    get_content_url(list_con)
    for j in list_con:
        for i in range(1,10):#我是下载这个套图的前面10章照片
            url=j+'_'+str(i)+'.html'
            html=requests.get(url)
            html.encoding='gbk'
            html=html.text
            get_pic_url(list_pic,html)
            get_pic_name(list_name,html)
        write_pic(list_pic,list_name)
        print(list_pic)
        print(list_name)
        list_pic=[]’’’为什么要将这两个列表初始化?因为我已经收集了一套的图片,如						果我不初始化的话,函数依然会调用那些我已经收集照片的url,						这就造成了资源的浪费’’’
        list_name=[]

最后调用main()函数

接下来给出所有的代码,注意!网站会更新它的系统,也就是说会更新它的代码!!!所以这个方法如果不行的话,是网站的原因不是我的原因,我自己是下载了的!

import requests
import re
from bs4 import BeautifulSoup
'''
第一步:在目录页面得到所有主页面的url
第二步:把这个url放在列表中
第三步:得到照片的url链接放到一个列表中
第四步:得到照片的名字放到一个列表中
第五步:将照片url的列表遍历并且发送request请求,写入文件。
        并且文件的名字为照片名字
'''
def get_content_url(list_con):
    url='http://www.27270.com/tag/63.html'
    html=requests.get(url)
    html.encoding='gbk'
    soup=BeautifulSoup(html.text,'lxml')
    con_url=soup.find_all('a')
    j=0
    for i in con_url:#j用来计数,当j的值为30的时候退出这个循环,
                      #因为这个目录有40个照片而我只需要前面30个
        try:
            href=i['href']
            if'http://www.27270.com/ent/meinvtupian/'in href and '.html'in href:
                print(href)
                list_con.append(href[0:48])
                j=j+1
        except:
            continue
        if(j==30):
            break

def get_pic_url(List_pic,html):
    soup=BeautifulSoup(html,'lxml')
    src=soup.find_all('img')
    try:
        for i in src:
            link=i['src']
            if'http://t2.hddhhn.com/uploads/tu/'and '9999'in link:
                List_pic.append(link)
    except:
        print('错误')
        
def get_pic_name(List1_name,html):
    soup=BeautifulSoup(html,'lxml')
    title=soup.find_all('h1',class_="articleV4Tit")
    name=''.join('%s' %i for i in title)
    name=name.replace('h1','')
    name=name.replace('class="articleV4Tit"','')
    name=name.replace('</>','')
    name=name.replace('< >','')
    List1_name.append(name)
        
def write_pic(List,List1):
    for i in range(len(List)):
        try:
            html=requests.get(List[i])
            with open(List1[i]+'.jpg','wb') as f:
                f.write(html.content)
                print('第%d张写入成功'%i)
                f.close()
        except:
            print('第%d张写入失败'%i)
            continue
        
    return ''

def main():
    list_pic=[]
    list_name=[]
    list_con=[]
    get_content_url(list_con)
    for j in list_con:
        for i in range(1,10):
            url=j+'_'+str(i)+'.html'
            html=requests.get(url)
            html.encoding='gbk'
            html=html.text
            get_pic_url(list_pic,html)
            get_pic_name(list_name,html)
        write_pic(list_pic,list_name)
        print(list_pic)
        print(list_name)
        list_pic=[]
        list_name=[]

main()





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值