Python Beautifulsoup 图像标签解析

6
我正在使用beautifulsoup解析“www.youtube.com”中的所有img标签。
代码如下:
import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen('http://www.youtube.com/')
soup = BeautifulSoup(page)
tags=soup.findAll('img')

我无法获取所有的img标签,而且获取到的img标签也是无效的。

我解析后得到的img标签与页面源代码中的不同。一些属性缺失了。

我需要获取youtube.com上的所有视频img标签。

请帮忙。

6个回答

6

我在这里尝试时似乎可以工作

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen('http://www.youtube.com/')
soup = BeautifulSoup(page)
tags=soup.findAll('img')
print "\n".join(set(tag['src'] for tag in tags))

产生这个结果,在我看来还不错。
http://i1.ytimg.com/vi/D9Zg67r9q9g/market_thumb.jpg?v=723c8e
http://s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif
//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif
/gen_204?a=fvhr&v=mha7pAOfqt4&nocache=1337083207.97
http://i3.ytimg.com/vi/fNs8mf2OdkU/market_thumb.jpg?v=4f85544b
http://i4.ytimg.com/vi/CkQFjyZCq4M/market_thumb.jpg?v=4f95762c
http://i3.ytimg.com/vi/fzD5gAecqdM/market_thumb.jpg?v=b0cabf
http://i3.ytimg.com/vi/2M3pb2_R2Ng/market_thumb.jpg?v=4f0d95fa
//i2.ytimg.com/vi/mha7pAOfqt4/hqdefault.jpg

我尝试了相同的方法,但大部分的源代码都是相同的,而且大部分的图像标签都缺失了。 - TomJoy
是的,对于我来说,它只显示了第一个图像源,而不是全部 :-( - Abu Shoeb

3

我也遇到了类似的问题,找不到所有的图片。下面是一段代码,可以获取图像标签的任何属性值。

from BeautifulSoup import BeautifulSoup as BSHTML
import urllib2
page = urllib2.urlopen('http://www.youtube.com/')
soup = BSHTML(page)
images = soup.findAll('img')
for image in images:
    #print image source
    print image['src']
    #print alternate text
    print image['alt']

0
def grabimagetags():
import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen('http://www.youtube.com/')
soup = BeautifulSoup(page)
tags = soup.findAll('img')
list.extend(set(tag['src'] for tag in tags))


return list

grabimagetags()

我只会做这个更改,以便您可以传递img标签列表


0

我个人认为显式地使用 soup.findAll(name='img') 是行得通的,而且页面上也没有漏掉任何东西。


soup.findAll(name='img')返回相同的结果。我尝试在HTML页面中显示它,但什么也没有显示。 - TomJoy
еҰӮжһңдҪ жү“еҚ°еҮәurllib2.urlopen('http://www.youtube.com/')зҡ„з»“жһңпјҢе®һйҷ…дёҠдјҡжҳҫзӨәеҮәд»Җд№Ҳпјҹ - Christian Witts
1
我已经打印了它,但是图像标签使用一些无效的src进行打印,并且所有的图像标签都无法获取。 - TomJoy
视频标签怎么样? - Vincent

0
在我的情况下,一些图像没有包含 src
因此,我这样做是为了避免 keyError 异常:
art_imgs = set(img['src'] for img in article.find_all('img') if img.has_attr('src')) 

0

试试这个。

from simplified_scrapy import SimplifiedDoc, req
url = 'https://www.youtube.com'
html = req.get(url)
doc = SimplifiedDoc(html)
imgs = doc.listImg(url = url)
print([img.url for img in imgs])

imgs = doc.selects('img')
for img in imgs:
  print (img)
  print (doc.absoluteUrl(url,img.src))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接