python爬虫之正则表达式练习——爬取百度图片

1 明确需求,创建环境

'''
第一步:明确需求,转换图片
需求:爬取百度图片中关于森林的图片,并保存
网址:https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1589534417282_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E6%A3%AE%E6%9E%97
观察页面:图片列示以瀑布式罗列,没有一页两页,只有拉动鼠标,不断加载图片,爬取量过大,没有明确数量
转换页面:将其把瀑布流形式的数据变成传统页面形式的数据  通过 index->flip
转换后网址:https://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1589534417282_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E6%A3%AE%E6%9E%97
'''

(1)所在网址
在这里插入图片描述
(2)将瀑布式页面转为翻页式 index改为flip
在这里插入图片描述
在这里插入图片描述

2 爬取第一张图片

'''
第二步:爬取第一张图片
1 寻找图片url:https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3996954500,1709679658&fm=26&gp=0.jpg
2 选择清晰度更高的图片: 通过在网页源代码中查询 选择 objURL指向的图片
# 源代码中thumbURL、middleURL、hoverURL、objURL都指向图片,但是objURL图片更为清晰
# http://www.asunxf.com/public/uploads/images/149516208595569.jpg
3 爬取第一张图片
'''
import requests
url = 'http://www.asunxf.com/public/uploads/images/149516208595569.jpg'
with open('1.jpg','wb') as f:
    r = requests.get(url)
    f.write(r.content)

(1)找到图片地址
在这里插入图片描述
(2)选择清晰度更高的图片地址
在这里插入图片描述
(3)爬取第一张图片
在这里插入图片描述

3 爬取多张图片

'''
爬取多张图片:
1 拿到目标url
2 拿到网页源代码
3 拿到图片的url
4 保存图片
'''
# 1 拿到目标url
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1589534417282_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E6%A3%AE%E6%9E%97'

# 2 拿到网页源代码
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
r = requests.get(url,headers=headers)
ret = r.text
# print(result)  # 打印输出,看是否得到结果了

# 3 拿到图片url(在源代码内部查找图片url--> objURL)
import re
## "objURL":"http://www.asunxf.com/public/uploads/images/149516208595569.jpg"
## 获得 "http://www.asunxf.com/public/uploads/images/149516208595569.jpg"  用分组() 且源代码中不需要考虑换行
## 用正则表达式匹配,查找规律: "objURL": "(.*?)" . 表示除换行符的任意字符、*表示出现0或多次、?表示出现0次或1次  这样就匹配了除换行符外所有字符
result = re.findall('"objURL":"(.*?)"',ret)
# print(result)
## 得到结果
## ['http://image.biaobaiju.com/uploads/20190519/21/1558273090-lIPSAHzKmv.jpg', 'http://a0.att.hudong.com/84/03/01300544405356150572030622083.jpg', 'http://www.asunxf.com/public/uploads/images/149516208595569.jpg', 'http://img.zcool.cn/community/017f7c5a5d7857a8012113c7328510.jpg@1280w_1l_2o_100sh.jpg', 'http://pic1.win4000.com/wallpaper/f/598a7f4fad5ae.jpg', 'http://img3.doubanio.com/view/photo/l/public/p2252763412.jpg', 'http://file05.16sucai.com/2015/0707/49983dadac864480481cc01e25e3575d.jpg', 'http://img6.android.d.cn/android/new/game_image/50/12650/banner.png', 'http://n.sinaimg.cn/front/197/w1080h717/20181130/iKSo-hpevhcm4232272.jpg', 'http://img3.redocn.com/tupian/20151026/maomideyangguangsenlin_5189304.jpg', 'http://img0.pconline.com.cn/pconline/1206/25/2836432_forests9_thumb.jpg', 'http://pic25.nipic.com/20121130/5252423_213434941000_2.jpg', 'http://img.sj33.cn/uploads/allimg/201103/20110316000243463.jpg', 'http://img.qumofang.com/813_20180312_route_FiCVlJ9FQqAJAg1DbUYUq7lZTNU-.jpg', 'http://img.08087.cc/uploads/20190909/19/1568027249-pTkLZKhPXd.jpg', 'http://spider.ws.126.net/0aee6495e82e07d1aeb060e435d8a7ad.jpeg', 'http://img.taopic.com/uploads/allimg/110802/9123-110P21QF150.jpg', 'http://img.zcool.cn/community/01e55355fa7cf732f875a132af9bd1.jpg@1280w_1l_2o_100sh.png', 'http://pic31.nipic.com/20130701/10717360_204504436110_2.jpg', 'http://s9.rr.itc.cn/r/wapChange/201512_19_15/a7b79m3219482356405.jpg', 'http://pic18.nipic.com/20111205/5252423_185743376000_2.jpg', 'http://img1.qunarzz.com/travel/d7/1610/3b/438bdbfe5e83b5.jpg_r_640x426x70_f2392c83.jpg', 'http://image.biaobaiju.com/uploads/20190508/18/1557312150-mYoXdPEgSU.jpg', 'http://youimg1.c-ctrip.com/target/tg/095/148/054/ab09325c778e46b6a62b23218788acd7.jpg', 'http://cdn03.pinkoi.com/pinkoi.magz/19l3A7KT/14462014846057.jpg', 'http://pic31.nipic.com/20130721/5252423_124454877000_2.jpg', 'http://pic1.win4000.com/wallpaper/c/547824e988085.jpg', 'http://pic36.nipic.com/20131211/10038431_153949508104_2.jpg', 'http://thumbs.dreamstime.com/x/%E6%A3%AE%E6%9E%97%E5%85%AC%E8%B7%AF-16197599.jpg', 'http://res.travel.ifeng.com/258272740c70de4d/2011/0823/ori_4e534cc1aaf2e.jpeg', 'http://img.zcool.cn/community/01a00055fb763332f875a132e1e113.jpg@2o.jpg', 'http://www.nh.gov.cn/picture/0/1705191056527188622.jpg', 'http://res.sgfb.sgxw.cn/a/10001/201903/bbe84e17fb1978925af5e9434f59eee9.jpeg', 'http://m.tuniucdn.com/fb2/t1/G1/M00/F4/AF/Cii9EFa_3qKIaxmTAAWuwx5nrSMAAB2MwOyTcgABa7b81_w500_h280_c1_t0.jpeg', 'http://pic1.win4000.com/wallpaper/2019-02-20/5c6ce5f1062f3.jpg', 'http://img.mp.itc.cn/upload/20161123/51a7ae9cfc5048ac96daf7b2716413fa_th.jpg', 'http://imgsrc.baidu.com/forum/pic/item/b7a3cb8065380cd78e9bd412a144ad345b8281a0.jpg', 'http://pic8.nipic.com/20100708/4807676_084921016169_2.jpg', 'http://www.gxly.gov.cn/upload/20141226/904c1dfc-2395-4f2c-a5e6-b49fc1da2ed6.JPG', 'http://pic115.huitu.com/res/20190325/1674814_20190325000633031050_1.jpg', 'http://img.zcool.cn/community/01452957721f5d0000018c1b6cbb9d.jpg', 'http://images.quanjing.com/east005/high/east-ep-a91-3939666.jpg', 'http://pic.16pic.com/00/29/49/16pic_2949714_b.jpg', 'http://pic124.huitu.com/res/20190627/1417944_20190627221005895070_1.jpg', 'http://b-ssl.duitang.com/uploads/item/201311/12/20131112215456_i4dSx.jpeg', 'http://img.jk51.com/img_jk51/337453995.jpeg', 'http://pic31.nipic.com/20130719/5252423_184439567000_2.jpg', 'http://img.redocn.com/sheying/20150310/yuyucangcangdesenlin_3986481.jpg', 'http://img.zcool.cn/community/01bf71554436620000019ae9f11d1e.jpg', 'http://5b0988e595225.cdn.sohucs.com/images/20181114/16f65de97952477b8726ff4a45cbb7b5.jpeg', 'http://pic119.huitu.com/res/20190505/1703346_20190505065556339011_1.jpg', 'http://00.minipic.eastday.com/20181106/20181106194814_c67f74e7a6c92201a15e555c4079e563_1.jpeg', 'http://img8.zol.com.cn/bbs/upload/22651/22650732.jpg', 'http://www.917ii.com/bbs/data/attachment/forum/201405/15/095501ym332aq7w611617a.jpg', 'http://img.redocn.com/sheji/20150731/qingxinsenlinshipinsucai_4754086.jpg', 'http://pic27.nipic.com/20130311/12089017_151412092000_2.jpg', 'http://www.znweiye.cc/data/attachment/forum/201907/16/140559tpcwwdswtbftyksp.jpg', 'http://images4.c-ctrip.com/target/t1/tuangou/046/437/935/56508bb40b564607baac4157cb0a2654_720_480.jpg', 'http://img.sccnn.com/bimg/338/23251.jpg', 'http://thumbs.dreamstime.com/z/%E6%A3%AE%E6%9E%97-16021609.jpg']

# 4 保存图片
for i in result:
# http://www.asunxf.com/public/uploads/images/149516208595569.jpg
    # 获取图片的名字
    name = i[-10] # 提取末尾的10个字符作为名字
    name = re.sub('/', '', name)  # 将部分图片的末端为 /123asd.jpg (/加内容)系统以为是文件夹 ,会报错,把/替换为空
    print(name)

    # 处理图片的格式   部分图片不是以图片文件为后缀,主动为它添加
    end = re.search(r'(\.jpg|\.png|\.jpeg|\.gif)$',name)
    if end == None:
        name = name + '.jpg'

    #存储图片
    with open('img/'+name,'wb') as f:  # 创建img文件夹,存储图片
        # 排除网络问题
        try:
            r = requests.get(i,headers=headers)
        except Exception as e:
            print(e)

        f.write(r.content)

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值