Python爬取百度图片|我们都爱的ins小姐姐头像

谁不喜欢漂亮小姐姐
一.前言
各大网站都要上传头像,但是我的话真的没有自信到用自拍(良心拷问:腹肌在哪?二头肌在哪?…)作为社会责任感很强的我,考虑到用好看的小姐姐图片做头像对社会的积极作用,决定先批量库存一波。之前看到b站上说微信头像的重要性,比如很丧的头像就不会有让别人跟它聊天的想法还有一些作为男生应该避免的头像(太傻吊的就不要用了)等等。还有,最近看到有一个岗位叫程序员鼓励师,该岗位要求五官端正活泼可爱性格开朗女生,单身加分,不用会编程,balabala,具体细节百度8,主要工作就是鼓励程序员们加油干活。(感觉非常有道理,我需要小姐姐的鼓励,mua)。结合这两个因素,存点漂亮小姐姐头像何乐而不为,撸起袖子,开干。

二.过程
首先,url得找对,经过尝试,这个百度图片网站好爬取一些:http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=ins女头像&pn=
参数&word后面填搜索的关键词,我这里填的ins女头像,想填啥填啥吧,比如伤感女头像,ins冷淡风女头像,看个人口味8。&pn参数是页码,我自己是当参数传进去写的,然后我没爬很多页,电脑内存有点不够,哈哈,存个一百张左右就够了,一页大概六十张。
然后,封装头部和用代理ip。说道代理ip我真的有点悲伤,因为上次想建ip池来着,爬站大爷的时候,ip被封不说,还被警告,人家直接在页面上跟我说“兄弟你别爬了,网站上的ip都是死的,没用”。其实用不了就用不了么,我本来就只是试试程序,学习过程嘛,路还长着哩,大不了我花点钱买代理呗,就是真的不喜欢被怼,哈哈。这次还蛮幸运的,找到的几个代理ip还都能用。再就是必换的请求头部里的user-agent,直接fake_useragent包是真滴好用,推荐。
最后,jpg文件存储,就按文件存储操作,路径文件名不写错然后存的是response.content,以前都用的text。
强调,提醒自己多用try,except和输出,这样调试的时候知道问题出在哪,输出友好一点便于知道程序运行到哪了。
这次也用了上星期学的多线程,没有用类的继承方法,而是直接创建进程,提醒自己长点脑子8,threading.Thread()里面第二个参数函数传入值最后加逗号,不然报错,记住记住,还有就是目前运行线程名输出一下。

三.附上代码和结果(没写啥注释,只爬了一页,代码可改)

# -*- coding: utf-8 -*-
import requests
from fake_useragent import UserAgent
import time
import re
import threading
import random

ua=UserAgent()


proxy_list = [
    '111.29.3.221:8080',
    '111.29.3.185:8080',
    '111.29.3.185:8080',
    '111.29.3.193:8080',
    '39.135.24.11:8080',
    '111.29.3.189:8080'
]


#获取单页所有图片
def crawl_page(page):
    header={'User-Agent':ua.random,
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Host': 'image.baidu.com',
            'Upgrade-Insecure-Requests': '1'            
            }
    url="http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=ins女头像&pn="+str(page)
    print(str(threading.current_thread())+"正在运行")
    response=requests.get(url,headers=header,timeout=10)
    if response.status_code!=200:
        print("第%s页爬取失败"%page)
        time.sleep(0.5)
    else:
        print("第%s页爬取成功"%page)
        response=response.text
        p_urls=re.findall('"objURL":"(.*?)",', response, re.S)
        num=1
        for pic in p_urls:
            print(str(threading.current_thread())+"正在下载第%d张图片"%num)
            num+=1
            if pic is not None:
                time.sleep(1)
                header['User-Agent']=ua.random
                try:
                    picture=requests.get(pic,headers=header,proxies={'http':random.choice(proxy_list)},timeout=10)
                except:
                    print("访问"+pic+'失败')
                    continue
                if picture.status_code!=200:
                    print(str(picture.status_code)+'错误')
                    print(pic+'获取失败')
                    time.sleep(1)
                    continue
                try:
                    file="C://Users//lenovo//Pictures//Saved Pictures//insgirl_{page}_{num}.jpg".format(page=str(page),num=str(num))
                    f=open(file,'wb')
                    print('文件打开成功')
                    f.write(picture.content)
                    print('图片写入成功')
                    f.close()
                    time.sleep(1)
                except:
                    print('当前图片无法下载'+'\n'+pic+'\n')
                    time.sleep(1)
                    continue


def main():
    for page in range(1,2):
        t=threading.Thread(target=crawl_page,args=(page,))
        t.start()
        
if __name__=='__main__':
    main()

控制台输出
小姐姐
就先这样8,真滴喜欢漂亮小姐姐,都是我的都是我的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值