批量爬取自己输入关键字图片的类型 requests+re+os


最近两周,都在暑假集训实验室(acm)别人都是学习算法参加比赛,指导老师为我们小部分人开的项目组学习,因为我发现了,算法太灵活,脑袋确实不够用,参加程序设计也没取得好的成绩,所以这学期中后部分就想学习项目。感谢指导老师我们考虑,同时还在督促我们机器学习,瞄准实习岗位的针对性学习....

图片爬虫需要环境:

python 3.6  (官网下载 3.6 https://www.python.org/downloads/)当然最新版是3.7不过由于新版一些第三方库还不完善,或者没适配好,我的同学就是下了3.7结果出了问题,就回到3.6了,还问我重新要安装包。因为现在一些包不能直接pip install 安装。

需要的第三方库:  requests(网页请求用的库),re(提取网页信息的正则表达式库),os(系统保存文件路径库)


爬取实例网址:http://pic.sogou.com/



按F12或者鼠标右键进入选择进入网页源代码:当输入动漫时地址变成了http://pic.sogou.com/pics?query=%B6%AF%C2%FE&w=05009900&p=&_asf=pic.sogou.com&_ast=1531399106&sc=index&sut=2506&sst0=1531399105958,由此我们可以知道,爬取自己想要的图片类型是http://pic.sogou.com/pics?query=+输入的关键字,所以带时候,我们只需要把关键字前面的网页地址固定,爬取的类型由运行时程序从键盘输入。

首先定义三个函数,主函数,获取图片的地址的函数,下载图片的函数:

获取图片地址函数:参数是传进来的原始网页地址,img_url保存地址的列表,需要爬取的图片数,num

def getPictureAddress(url,img_url,num):

下载图片函数:img_url保存地址的列表,保存的路径,爬取类型动漫的名字

def getPicture(img_url,path,name):

主函数,像c语言那样,有良好的代码风格

def main():

要说下提取网页图片地址,因为存入的是text文档,不是正常的网页标签树,不能直接用BeautifulSoup解析网页提取。用正则表达式提取,查看网页源代码可以发现:图片地址是thunbul键值对,对应的值,就是图片地址,因为点进去就下载图片,要修改一下后缀,增加后缀.jpg或者.png都是我们要找的图片。所以可以确定是图片地址。


难点:怎么把地址完整有效的提取,这里处理有点麻烦,弄了好几,首先得熟悉正则表达式,然后运用,在处理提取出来的东西,因为会有""这种符号,还得去掉。

由于时间,来不及详细叙述了,因为马上9点实验室下课了,哈哈

就直接放成果和源代码



全部源代码:

import requests,os,re
def getPictureAddress(url,img_url,num):
    try:
         r=requests.get(url,img_url)
         r.raise_for_status()
         r.encoding=r.apparent_encoding
         print("网页请求成功!")
         #正则表达式提取图片地址信息
         pattern = re.compile('(?=thumbUrl)\S{1,100}(?=,)')  
         ls=re.findall(pattern,r.text)
         for i in range(num):
             url='"'+"http:"+ls[i].split(':')[-1]
             #去除首位""字符
             img_url.append(url.strip('"'))
    except:
        print("网页请求失败")
def getPicture(img_url,path,name):
    n=0
    for url in img_url:
        n+=1
        r=requests.get(url)
        with open(path+name+str(n)+".jpg","wb") as file:
            file.write(r.content)
            print("*****第%d张图片下载成功!******"%n)
    file.close()
    print("所有图片下载成功!")
def main():
    path="D:\QQPCMgr(1)\Desktop\爬取的资料\图片/"
    start_url="http://pic.sogou.com/pics?query="
    category=input("请输入需要爬取图片的类型(动物,明星,影视,汽车,动漫,摄影,清新,手绘....)\n")
    num=int(input("请输入爬取的张数:"))
    img_url=[]
    url=start_url+category
    getPictureAddress(url,img_url,num)
    getPicture(img_url,path,category)
main()

如果有问题,欢迎留言~

猜你喜欢

转载自blog.csdn.net/memory_qianxiao/article/details/81021693