鱼C论坛

 找回密码
 立即注册
查看: 2114|回复: 7

用正则表达式爬图,不报错但是不出结果??

[复制链接]
发表于 2018-1-8 14:28:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么不会下载呢??没有报错,测试:for each    in imglist:       print(each) 也不出结果
1515392785079.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-8 14:46:06 | 显示全部楼层
本帖最后由 ba21 于 2018-1-8 14:47 编辑

应该是正则没写对,在检查下吧!

原本你上代码可以帮你检查下,你传个图,天冷懒得抄了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-8 14:50:23 | 显示全部楼层
ba21 发表于 2018-1-8 14:46
应该是正则没写对,在检查下吧!

原本你上代码可以帮你检查下,你传个图,天冷懒得抄了

import re
import urllib.request

def open_url(url):
    req =   urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36')
    page=urllib.request.urlopen(req)
    html=page.read().decode('utf-8')

    return  html

def get_img(html):
    p   =   r'''<img id="hdFirstImgObj" data-replace="1" onload="document.getElementById('currentImg').src=this.src; this.setAttribute('data-replace', '1'); alog &amp;&amp; alog('speed.set', 'c_imgobjshow', +new Date); alog.fire &amp;&amp; alog.fire('mark'); speed &amp;&amp; speed.mark('firstSc');" src="([^"]+\.jpg)"'''
    imglist =   re.findall(p,html)
    #for each    in imglist:
      #  print(each)

    for each    in imglist:
        filename=each.split("/")[-1]
        urllib.request.urlretrieve(each,filename,None)

if  __name__    ==  '__main__':
    url='http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&sf=1&fmq=1389861203899_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ala=6&ori_query=%E5%94%AF%E7%BE%8E%E5%9B%BE%E7%89%87&fr=ala&ala=1&alatpl=adress&pos=2&oriquery=%E5%94%AF%E7%BE%8E%E5%9B%BE%E7%89%87&alaTag=0&&word=%E5%94%AF%E7%BE%8E%E5%9B%BE%E7%89%87%20%E6%84%8F%E5%A2%83&hs=2&xthttps=000000'
    get_img(open_url(url))


谢谢您!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-8 14:59:09 | 显示全部楼层
quyuanhang 发表于 2018-1-8 14:50
import re
import urllib.request

别个百图图片是加密的,你这样是爬不到的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-8 15:48:19 | 显示全部楼层
ba21 发表于 2018-1-8 14:59
别个百图图片是加密的,你这样是爬不到的

啊,那请问怎么判别是不是加密的呀??麻烦麻烦啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-8 16:17:25 | 显示全部楼层
本帖最后由 gopythoner 于 2018-1-8 16:19 编辑
quyuanhang 发表于 2018-1-8 15:48
啊,那请问怎么判别是不是加密的呀??麻烦麻烦啦


首先,百度的图片是通过ajax加载的,也就是并不是一次性显示很多图片,而是在页面往下拉的时候去加载更多图片,所以你请求到的网页源代码中的链接不会很多
然后,网页的图片转换成了dataurl的格式,你可以去查这个格式的
所以,你要得到源代码中的图片链接,可以自己在源代码中搜索data:image/jpeg;base64

你就知道怎么写正则了

正则   p = 'data:image/jpeg;base64.*?'  能够提取到一些图片链接,但是很少,原因我上面也说了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-8 16:20:24 | 显示全部楼层
我记得百度的图片还有防盗链,也就是请求的时候必须要设置请求头才行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-8 16:28:09 | 显示全部楼层
gopythoner 发表于 2018-1-8 16:20
我记得百度的图片还有防盗链,也就是请求的时候必须要设置请求头才行

谢谢您!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-27 01:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表