鱼C论坛

 找回密码
 立即注册
查看: 1932|回复: 14

[已解决]关于爬取知乎图片的get_txt的用法

[复制链接]
发表于 2017-9-3 19:09:43 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 kunkun_1230 于 2017-9-3 19:19 编辑

周末的时候根据教程,模仿了一个爬取知乎妹纸图的文件。
系统:win10
工具:python 3.6

在模拟过程中,发现所有的妹纸图片都在这样一个语句中(以诸多语句中的一个为例):
<noscript>
                   <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_r.jpg" data-rawheight="1500" data-rawwidth="1082" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_b.jpg" width="1082"/>
                   还差点火候~~( ′ ▽ ` )&#65417;
</noscript>

于是想采用以下语句进行提取链接:
with open("C:/output/rawfile/noscript_meta.txt", 'w', encoding='utf-8') as noscript_meta:
        noscript_nodes = result_soup.find_all('noscript') # 找到所有<noscript>node
        noscript_inner_all = ""
        for noscript in noscript_nodes:
            noscript_inner = noscript.get_text() # 获取<noscript>node内部内容
            noscript_inner_all += noscript_inner + "\n"

        noscript_all = html.parser.unescape(noscript_inner_all) #  将内部内容转码并存储
        noscript_meta.write(noscript_all)
然而提取出来的链接只有这几个字:   还差点火候~~( ′ ▽ ` )&#65417;

可见get_txt这个写法可能不对。
尝试采用 noscript_inner = noscript[‘src’]或者['data-original'],结果如图提示:
keyerror

错误原因

错误原因


请问有哪位大神知道,这种情况应该如何将图片链接在两个noscript中提取出来呢?
不胜感激/(ㄒoㄒ)/~~(全部程序见network.py https://github.com/kunkun1230/Python-/tree/master/output/rawfile)
最佳答案
2017-9-3 23:29:58
本帖最后由 ba21 于 2017-9-3 23:32 编辑
  1. import re

  2. str1='''<noscript>
  3.                    <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_r.jpg" data-rawheight="100" data-rawwidth="400" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_b.jpg" width="1082"/>
  4.                    还差点火候~~( ′ ▽ ` )&#65417;
  5. </noscript>
  6. <noscript>
  7.                    <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_asdf.jpg" data-rawheight="1550" data-rawwidth="100" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_43.jpg" width="1082"/>
  8.                    还差点火候~~( ′ ▽ ` )&#65417;
  9. </noscript>
  10. '''

  11. r=re.findall(r'<img class="origin_image zh-lightbox-thumb" data-original="(https://.+\.jpg)" data-rawheight="[0-9]+" data-rawwidth="[0-9]+" src="(https://.+\.jpg)"',str1)
  12. for url in r:
  13.     print(url[0]+'\n'+url[1])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-9-3 20:01:17 | 显示全部楼层
  1. import re

  2. str1='''<noscript>
  3.                    <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_r.jpg" data-rawheight="1500" data-rawwidth="1082" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_b.jpg" width="1082"/>
  4.                    还差点火候~~( ′ ▽ ` )&#65417;
  5. </noscript>'''

  6. r=re.search(r'<img class="origin_image zh-lightbox-thumb" data-original="(https://.+\.jpg)" data-rawheight="1500" data-rawwidth="1082" src="(https://.+\.jpg)"',str1)
  7. print(r.group(1))
  8. print(r.group(2))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 21:33:34 | 显示全部楼层

谢谢大神的帮助。可是这个网页里面有很多这样的noscript,阁下这个写法,不是只能处理一次么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-3 21:34:04 | 显示全部楼层
试着做了一下,然后上传到github了
欢迎fork、star、pr
https://github.com/LewisTian/Python
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-3 21:46:24 | 显示全部楼层
kunkun_1230 发表于 2017-9-3 21:33
谢谢大神的帮助。可是这个网页里面有很多这样的noscript,阁下这个写法,不是只能处理一次么?

哦,把你代码上上来。我改好发给你。也免得你伤脑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 21:46:50 | 显示全部楼层
tich 发表于 2017-9-3 21:34
试着做了一下,然后上传到github了
欢迎fork、star、pr
https://github.com/LewisTian/Python

腻害,请问有没有什么方式把那个get_txt(),进行一下修改??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-3 21:52:51 | 显示全部楼层
正式宣布,你可以用现在的了。

  1. import re

  2. str1='''<noscript>
  3.                    <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_r.jpg" data-rawheight="1500" data-rawwidth="1082" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_b.jpg" width="1082"/>
  4.                    还差点火候~~( ′ ▽ ` )&#65417;
  5. </noscript>
  6. <noscript>
  7.                    <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_asdf.jpg" data-rawheight="1500" data-rawwidth="1082" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_43.jpg" width="1082"/>
  8.                    还差点火候~~( ′ ▽ ` )&#65417;
  9. </noscript>
  10. '''

  11. r=re.findall(r'<img class="origin_image zh-lightbox-thumb" data-original="(https://.+\.jpg)" data-rawheight="1500" data-rawwidth="1082" src="(https://.+\.jpg)"',str1)
  12. for url in r:
  13.     print(url[0]+'\n'+url[1])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 22:01:16 | 显示全部楼层
ba21 发表于 2017-9-3 21:46
哦,把你代码上上来。我改好发给你。也免得你伤脑

代码在这里啊https://github.com/kunkun1230/Python-/tree/master/output/rawfile,network.py
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 22:18:09 | 显示全部楼层
ba21 发表于 2017-9-3 21:52
正式宣布,你可以用现在的了。

这个好像还是只能处理一次哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-3 22:20:22 | 显示全部楼层
kunkun_1230 发表于 2017-9-3 22:18
这个好像还是只能处理一次哈

什么一次,这不是都提取出来了
2个no 。。。4个.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 22:39:32 | 显示全部楼层
ba21 发表于 2017-9-3 22:20
什么一次,这不是都提取出来了
2个no 。。。4个.jpg

不是的,亲。这个链接(https://github.com/kunkun1230/Python-/tree/master/output/rawfile)里面的raw_file.txt,里面的noscript有几百个的,等于有上百张图····
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-3 22:42:39 | 显示全部楼层
kunkun_1230 发表于 2017-9-3 22:39
不是的,亲。这个链接(https://github.com/kunkun1230/Python-/tree/master/output/rawfile)里面的raw_ ...

亲,你能举1返3不?
不要讲上百张,我给你的代码,你灵活运用上亿张还不就是改一个数字的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 23:19:32 | 显示全部楼层
ba21 发表于 2017-9-3 22:42
亲,你能举1返3不?
不要讲上百张,我给你的代码,你灵活运用上亿张还不就是改一个数字的问题。{:10_266 ...

大神,恕我愚钝。刚刚学习爬虫。我刚研究了一下网页,发现里面图片的尺寸都不太一样。用你的代码只找到了两张图。请问这个data-rawheight="1500"和 data-rawwidth="1082",应该怎么改的更加普遍一点呢?
谢谢谢谢!
  1. r=re.findall(r'<img class="origin_image zh-lightbox-thumb" data-original="(https://.+\.jpg)" data-rawheight="1500" data-rawwidth="1082" src="(https://.+\.jpg)"',str1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-3 23:29:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ba21 于 2017-9-3 23:32 编辑
  1. import re

  2. str1='''<noscript>
  3.                    <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_r.jpg" data-rawheight="100" data-rawwidth="400" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_b.jpg" width="1082"/>
  4.                    还差点火候~~( ′ ▽ ` )&#65417;
  5. </noscript>
  6. <noscript>
  7.                    <img class="origin_image zh-lightbox-thumb" data-original="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_asdf.jpg" data-rawheight="1550" data-rawwidth="100" src="https://pic3.zhimg.com/bf381cae0b94c7b6b70913423b5bb27a_43.jpg" width="1082"/>
  8.                    还差点火候~~( ′ ▽ ` )&#65417;
  9. </noscript>
  10. '''

  11. r=re.findall(r'<img class="origin_image zh-lightbox-thumb" data-original="(https://.+\.jpg)" data-rawheight="[0-9]+" data-rawwidth="[0-9]+" src="(https://.+\.jpg)"',str1)
  12. for url in r:
  13.     print(url[0]+'\n'+url[1])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 23:54:30 | 显示全部楼层

感谢大神的耐心教导,刚入坑,对正则还不是太懂。谢谢谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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