鱼C论坛

 找回密码
 立即注册
查看: 2136|回复: 18

正则表达式

[复制链接]
发表于 2019-7-26 21:59:05 | 显示全部楼层 |阅读模式
10鱼币
地址 = ‘http://image.so.com/view?q=%E5%8 ... amp;ps=60&pc=60
需要的东西:<img style="opacity: 1;" src="https://i0.hdslb.com/bfs/article/2c259c6842e18560f4861bd05073f6e01f06ff86.jpg">
https://i0.hdslb.com/bfs/article ... 073f6e01f06ff86.jpg这个地址
用正则表达式提取这个东西????

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 20:27:29 | 显示全部楼层
p = r'<img style="opacity: 1;" src="([^"]+\.jpg)"'
我用的是这个,正常语句可以提出来,但是在360页面里找不到对应的链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-26 23:36:26 From FishC Mobile | 显示全部楼层
为什么不用美丽汤?而且现在还有更好用的requests_html了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-27 00:07:06 From FishC Mobile | 显示全部楼层
regex =r'src="(.*?)"'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-27 00:15:47 | 显示全部楼层
image_url = re.findall(r'src="(.*?)">',res.text)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-27 14:26:07 | 显示全部楼层
本帖最后由 DT_Nelson 于 2019-7-27 14:33 编辑
import re
from urllib import request
url = "XXX"
with request.urlopen(url) as resp:
        html = resp.read().decode()
match = re.findall(r'(?<=src=").+?\.jpg(?=">)', html)
for img_url in match:
        with request.urlopen(img_url) as resp:
                html = resp.read()
        with open(img_url.split('/')[-1], 'wb') as f:
                f.write(html)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 20:17:52 | 显示全部楼层

不行,我把match打印出来得到的是空列表,如果正常的用正则表达式我想我已经成功了,你这个提取不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 20:20:48 | 显示全部楼层
kelby 发表于 2019-7-27 00:07
regex =r'src="(.*?)"'

['//s.qhupdate.com/sou/visit_duration.gif?', 'http://s1.qhres.com/static/936d5fe6acd29898/lib/jquery.js', 'http://s0.qhres.com/static/b904e9b25b8914e5/lib/monitor.js', 'http://s1.qhres.com/static/43411ba61a10c295/lib/suggest.js', '//image.so.com/api/hotsuggest.js', 'http://s0.qhres.com/static/3c0d27ecc26e1c68/search/view_carousel.js', 'https://s.ssl.qhimg.com/quc/quc6.js', '//s.qhupdate.com/sou/visit_duration.gif?']
我也弄出来过这个东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 20:22:09 | 显示全部楼层
天圆突破 发表于 2019-7-26 23:36
为什么不用美丽汤?而且现在还有更好用的requests_html了

体谅一下看几年前老视频的初学者好吧,能将清楚点吗,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 21:20:16 | 显示全部楼层
昼临明麟 发表于 2019-7-29 20:22
体谅一下看几年前老视频的初学者好吧,能将清楚点吗,谢谢

美丽汤就是beautifulsoup4,小甲鱼有做视频讲这个的,在极客python的爬虫篇里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 21:32:34 | 显示全部楼层
你不是正则匹配出来了吗,放到浏览器不就是图片吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 21:33:31 | 显示全部楼层
qbw941054510 发表于 2019-7-29 21:20
美丽汤就是beautifulsoup4,小甲鱼有做视频讲这个的,在极客python的爬虫篇里

哦哦,谢谢
极客下了还没看
听你这么一说我觉的我要去看完再来完成我的爬妹子大业了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 22:01:59 | 显示全部楼层
塔利班 发表于 2019-7-29 21:32
你不是正则匹配出来了吗,放到浏览器不就是图片吗

def get_html(url):
    req = urllib.request.Request(url)
    req.add_header("User-Agent","""Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    AppleWebKit/537.36 (KHTML, like Gecko)
    Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763)"""
    )
    page = urllib.request.urlopen(req)
    html = page.read().decode("utf-8")
   
    return html
这个r'<img style="opacity: 1;" src="([^"]+\.jpg)"'匹配不到html里面任何的东西得到的只有【】这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 23:35:32 | 显示全部楼层
昼临明麟 发表于 2019-7-29 21:33
哦哦,谢谢
极客下了还没看
听你这么一说我觉的我要去看完再来完成我的爬妹子大业了

哈哈哈最好先看那个,里面教了个比urllib更强的Requests模块,然后就能忘掉urllib愉快地用Requests了,究极舒服
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 07:48:26 | 显示全部楼层
昼临明麟 发表于 2019-7-29 22:01
def get_html(url):
    req = urllib.request.Request(url)
    req.add_header("User-Agent","""Mozi ...

那就是没匹配到啊,你html是得到网页源码,而不是渲染后的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-30 20:49:25 | 显示全部楼层
塔利班 发表于 2019-7-30 07:48
那就是没匹配到啊,你html是得到网页源码,而不是渲染后的

能说一下怎么操作吗,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 21:43:54 | 显示全部楼层

'<img style="opacity: 1;" src="https://i0.hdslb.com/bfs/article/2c259c6842e18560f4861bd05073f6e01f06ff86.jpg">'
'<img style="opacity: 1;" src="(.*?)">'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-31 13:49:32 | 显示全部楼层
本帖最后由 graceasyi 于 2019-7-31 13:50 编辑

get这个地址,得到的源码里没有图片的url,百度了一下,网上说:应该是网页返回是异步加载的,建议你用fiddler之类的抓包看下,是不是有异步请求!

通过抓包发现,确实有另一个请求返回json,里面有所有图片的url,所以不需要用正则,直接从json里就能读出图片的url了。

http://image.so.com/i?a=jsonpview&comm=1&q=%E5%8A%A8%E6%BC%AB%E5%A3%81%E7%BA%B8&src=srp&bz_parent=45&bz_child=67&bz_color=&bz_width=1536&bz_height=864&correct=%E5%8A%A8%E6%BC%AB%E5%A3%81%E7%BA%B8&sid=6c432801d7ddc12b71c5c4fae8c51476&ran=0&ras=0&adstar=0&direction=next&start=0&count=60&cn=0&gn=0&kn=0&tbkn=0&tbks=0&id=bc8fe37f75f2985e0b27ebd11143e316&multiple=0&ps=60&pc=60&pd=0&prevsn=-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-31 17:33:58 | 显示全部楼层
首先使用代理ip,print解码后的html发现没有图片的地址即没有https://i0.hdslb.com/bfs/article ... 073f6e01f06ff86.jpg这个地址。没有地址自然正则表达式找不到。

其次之所以没有图片地址原因是图片地址是通过本地javascript脚本自动加载的,在审查元素的页面(经过js动态加载)能看见地址,但查看网页源代码(即没有js动态加载)就会发现没有地址。

简单来说,你所要爬的网站以视频里教的技术还爬不了。(视频给的例子都是简单的没有js动态加载的页面)
https://blog.csdn.net/qq523176585/article/details/78693900百度的方法,想学再看这个吧,不过我是看不懂啦········
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 09:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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