我必须在html源代码中找到图像。我正在使用正则表达式而不是html.parser,因为我知道它更好,但是如果你能向我解释如何使用html解析就像你将要一个孩子一样,我也很乐意沿着这条路走下去。
不能使用beautifulsoup,希望我能,但我必须学会这么做。
我已经在regex和html(example)上阅读了很多问题和答案,所以我知道对这个主题的感受。
但请听我说!
这是我的编码尝试(Python 3):
import urllib.request
import re
website = urllib.request.urlopen('http://google.com')
html = website.read()
pat = re.compile (r'<img [^>]*src="([^"]+)')
img = pat.findall(html)
我在regex101.com上仔细检查了我的正则表达式,它可以找到img链接,但是当我在IDLE上运行它时,我收到语法错误并继续突出显示插入符号。为什么呢?
我朝着正确的方向前进......是吗?
更新: 嗨,我想的可能是我得到简短的快速回答,但似乎我可能触动了社区的神经。
我在节目制作方面肯定是新的和可怕的,没有办法解决这个问题。我一直在阅读所有评论,我非常感谢用户向我展示的所有帮助和耐心。
答案 0 :(得分:2)
正则表达式没有任何问题,你错过了两件事:
raw
字符串,以便将字符串原样传递给正则表达式编译器,而不进行任何转义解释.read()
调用的结果是字节序列,而不是字符串。所以你需要一个字节序列正则表达式。第二个是Python3特定的(我发现你使用的是Py3)
总而言之,只需按照以下方式修复上述行:
pat = re.compile (rb'<img [^>]*src="([^"]+)')
r
代表raw,b
代表字节序列。
此外,在实际将图片嵌入<img>
标记的网站上进行测试,例如http://stackoverflow.com。处理http://google.com
我们走了:
Python 3.3.2+
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.request
>>> import re
>>> website = urllib.request.urlopen('http://stackoverflow.com/')
>>> html = website.read()
>>> pat = re.compile (rb'<img [^>]*src="([^"]+)')
>>> img = pat.findall(html)
>>> img
[b'http://i.stack.imgur.com/tKsDb.png', b'http://i.stack.imgur.com/dmHl0.png', b'http://i.stack.imgur.com/dmHl0.png', b'http://i.stack.imgur.com/tKsDb.png', b'http://i.stack.imgur.com/6QN0y.png', b'http://i.stack.imgur.com/tKsDb.png', b'http://i.stack.imgur.com/L8rHf.png', b'http://i.stack.imgur.com/tKsDb.png', b'http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif']
答案 1 :(得分:1)
我使用urllib
而不是requests
,您可以从here下载。他们做同样的事情,我更喜欢requests
,因为它有更好的API。正则表达式字符串只是略有改变。如果在\s
标记之前有几个空格,则会添加img
。你 朝着正确的方向前进。您可以找到有关re
模块here的更多信息。
这是代码
import requests
import re
website = requests.get('http://stackoverflow.com//')
html = website.text
pat = re.compile(r'<\s*img [^>]*src="([^"]+)')
img = pat.findall(html)
print img
输出:
[u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/L8rHf.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/Ryr18.png', u'http://i.stack.imgur.com/ASf0H.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/Ryr18.png', u'http://i.stack.imgur.com/VgvXl.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/tKsDb.png', u'http://i.stack.imgur.com/6QN0y.png', u'http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif']
答案 2 :(得分:0)
re.compile (r'<img [^>]*src="([^"]+)')
你错过了模式
周围的引号(单引号或双引号)