response 返回图片_如何优雅的欣赏《青春有你2》小姐姐——图片爬虫+基于paddlehub的人像抠图...

33d91d768939885a01a6d2fbbf71e8a2.png

最近,《青春有你2》开播,隔几天就上一次热搜,到了几乎全民讨论的地步。其中许多的选手不论是美貌还是才艺都十分出彩。

追星的你可能很难把所有人的信息都全部了解,更是难以搜集欣赏所有漂亮小姐姐美丽的相片。

那么接下来我将告诉你如何一键get《青你2》中所有小姐姐的信息和照片!

7184607b6a5c1a238ed6ee13322f04d0.png

f93548913947ad44fbfe46f5e61b89d8.png

31ab3c8672e7c353b8297457737e8f70.png

57da7ed56e38de7b39f1eecf2042dd2d.png

使用工具:

为了获取大量的互联网数据,我们自然想到使用爬虫代替我们完成这些重复的工作。

爬虫的过程,就是模仿浏览器的行为,往目标站点发送请求,接收服务器的响应数据,提取需要的信息,并进行保存的过程。

Python为爬虫的实现提供了工具:requests模块、BeautifulSoup库。

接下来我们就会使用这些工具来获取我们想要的信息。

任务描述:

本次实践使用Python来爬取百度百科中《青春有你2》所有参赛选手的信息。

数据获取:

青春有你第二季_百度百科​baike.baidu.com
8f19d7664af062c1eb771807c82a44bc.png

37f9f330cc9857afb4ec210f087b6c2a.png

3b6a37fc545674d8022fa6fd13445a01.png

上网的全过程:

普通用户:

打开浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 渲染到页面上。

爬虫程序:

模拟浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 提取有用的数据 --> 保存到本地/数据库。

-------------------

爬虫的过程:

1.发送请求(requests模块)

2.获取响应数据(服务器返回)

3.解析并提取数据(BeautifulSoup查找或者re正则)

4.保存数据

-------------------

模块简介:

request模块:

requests是python实现的简单易用的HTTP库,官网地址:

Requests: 让 HTTP 服务人类​cn.python-requests.org
93c7b055f5b71e2e4ffd0a4e6068ad40.png

requests.get(url)可以发送一个http get请求,返回服务器响应内容。

BeautifulSoup库:

BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库。网址:

Beautiful Soup 4.4.0 文档​beautifulsoup.readthedocs.io
5a71c784ae4751f258a7d8bc803f2263.png

BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml。

BeautifulSoup(markup,"html.parser")或者BeautifulSoup(markup, "lxml"),推荐使用lxml作为解析器,因为效率更高。


第一步

具体来说,这一步是爬取百度百科中《青春有你2》中所有参赛选手信息,返回页面数据

也就是将如图的多有参赛学员信息爬取并返回。

b171cae55995a7f8837b7defeae35241.png

示例代码:

import 

第二步

对爬取的页面数据进行解析,并保存为JSON文件。

那么我们在这一步就可以获得如图所有人的具体信息了~~

示例代码:

def 

成功运行之后保存的json部分截图

6efa011a1c53f987ca25d47230f67c5e.png

第三步

爬取每个选手的图片,并进行保存。

这一步我们就可以获得所有小姐姐的美照了。一共下载482张照片。

具体的思路是从上一步得到的个人信息中进入每个人的百度百科,然后再进入相册,下载照片并保存。

def crawl_pic_urls():
    '''
    爬取每个选手的百度百科图片,并保存
    ''' 
    with open('work/'+ today + '.json', 'r', encoding='UTF-8') as file:
         json_array = json.loads(file.read())

    headers = { 
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' 
     }

    for star in json_array:

        name = star['name']
        link = star['link']

        #!!!请在以下完成对每个选手图片的爬取,将所有图片url存储在一个列表pic_urls中!!!                   
        try:
            response = requests.get(link,headers=headers)
            bs = BeautifulSoup(response.text,'lxml')

            pic_list_url='https://baike.baidu.com' + bs.select('.summary-pic a')[0].get('href')
            pic_list_response = requests.get( pic_list_url,headers=headers)
            
            bs = BeautifulSoup(pic_list_response.text,'lxml')
            pic_list_html=bs.select('.pic-list img')

            pic_urls=[]
            for pic_html in pic_list_html:
                pic_url=pic_html.get('src')
                pic_urls.append(pic_url)
            
        except Exception as e:
            print(e)

        #!!!根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中!!!
        down_pic(name,pic_urls)
为了方便检验代码正确性和调试,此处将爬取链接和下载图片分开
def down_pic(name,pic_urls):
    '''
    根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中,
    '''
    path = 'work/'+'pics/'+name+'/'

    if not os.path.exists(path):
      os.makedirs(path)

    for i, pic_url in enumerate(pic_urls):
        try:
            pic = requests.get(pic_url, timeout=15)
            string =name + str(i + 1) + '.jpg'
            with open(path+string, 'wb') as f:
                f.write(pic.content)
                print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
        except Exception as e:
            print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
            print(e)
            continue

代码运行成功后结果的部分截图:

3d2f4251b73ec448bc4fe927afea7f86.png

第四步

使用paddlehub中的模型,简单便捷的帮小姐姐去除背景。

def work_pic_path(path):
    '''
    遍历所爬取的每张图片,并进行人物处理
    '''
    import paddlehub as hub
    module = hub.Module(name="deeplabv3p_xception65_humanseg")#人像抠图模型
    for (dirpath,dirnames,filenames) in os.walk(path):
        for snames in filenames:
            test_img_path=[dirpath+'/'+snames]
            print(test_img_path)
            input_dict = {"image": test_img_path}
            # execute predict and print the result
            try:
                result = module.segmentation(data=input_dict) 
                print(result)    
            except:
                pass    

结果如下:

d9e163b8cc4bea16c76d0dfa592bf213.png

3c4e6c0a6f6afda427ae76c42fe3b863.png

05 第五步

主程序。

看着满屏的成功和新增的文件夹,成就感油然而生。

if __name__ == '__main__':

     #爬取百度百科中《青春有你2》中参赛选手信息,返回html
     html = crawl_wiki_data()

     #解析html,得到选手信息,保存为json文件
     parse_wiki_data(html)

     #从每个选手的百度百科页面上爬取图片,并保存
     crawl_pic_urls()

     #打印所爬取的选手图片路径
     work_pic_path('work/pics')

     print("所有信息爬取完成!")

12177fe29767353356c79fe144aa9ffb.png

本期内容到此结束,下一期我们分享数据分析和数据可视化。

此处添加AIStudio的项目地址:

《青春有你2》照片爬取+人像抠图 - 百度AI Studio - 一站式AI开发实训平台​aistudio.baidu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值