BeautifulSoup在具有特定类的div中为所有img获取多个元素

问题描述 投票:1回答:4

我试图在image-file标签img div id(我不想要previewImages链接)中获取src属性(相对链接,因为它)中的链接。

以下是HTML示例:

<div id="previewImages">
  <div class="thumb"> <a><img src="https://example.com/s/15.jpg" image-file="/image/15.jpg" /></a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/2.jpg" image-file="/image/2.jpg" /> </a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/0.jpg" image-file="/image/0.jpg" /> </a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/3.jpg" image-file="/image/3.jpg" /> </a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/4.jpg" image-file="/image/4.jpg" /> </a> </div>
</div>

我试过以下但它只给了我第一个链接而不是全部:

import sys
import urllib2
from bs4 import BeautifulSoup

quote_page = sys.argv[1] # this should be the first argument on the command line
page = urllib2.urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')

images_box = soup.find('div', attrs={'id': 'previewImages'})
if images_box.find('img'):
    imagesurl = images_box.find('img').get('image-file')
print imagesurl

如何在qazxsw poi中使用qazxsw poi获取qazxsw poi中qazxsw poi标签的所有链接?

python web-scraping beautifulsoup
4个回答
1
投票

使用image-file

例如:

img

输出:

div

1
投票

我认为使用带有传递给class previewImages的属性选择器的id会更快

.findAll

0
投票

BeautifulSoup有方法from bs4 import BeautifulSoup html = """<div id="previewImages"> <div class="thumb"> <a><img src="https://example.com/s/15.jpg" image-file="/image/15.jpg" /></a> </div> <div class="thumb"> <a><img src="https://example.com/s/2.jpg" image-file="/image/2.jpg" /> </a> </div> <div class="thumb"> <a><img src="https://example.com/s/0.jpg" image-file="/image/0.jpg" /> </a> </div> <div class="thumb"> <a><img src="https://example.com/s/3.jpg" image-file="/image/3.jpg" /> </a> </div> <div class="thumb"> <a><img src="https://example.com/s/4.jpg" image-file="/image/4.jpg" /> </a> </div> </div>""" soup = BeautifulSoup(html, "html.parser") images_box = soup.find('div', attrs={'id': 'previewImages'}) for link in images_box.findAll("img"): print link.get('image-file') - 检查/image/15.jpg /image/2.jpg /image/0.jpg /image/3.jpg /image/4.jpg 。这是您在代码中使用它的方法:

select

0
投票

如果我们使用lxml执行相同的方案,请添加,

from bs4 import BeautifulSoup as bs
html = '''
<div id="previewImages">
  <div class="thumb"> <a><img src="https://example.com/s/15.jpg" image-file="/image/15.jpg" /></a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/2.jpg" image-file="/image/2.jpg" /> </a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/0.jpg" image-file="/image/0.jpg" /> </a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/3.jpg" image-file="/image/3.jpg" /> </a> </div>
  <div class="thumb"> <a><img src="https://example.com/s/4.jpg" image-file="/image/4.jpg" /> </a> </div>
</div>
'''
soup = bs(html, 'lxml')
links = [item['image-file'] for item in soup.select('#previewImages [image-file]')]
print(links)

输出['/ image / 15.jpg','/ image / 2.jpg','/ image / .jpg','/ image / 3.jpg','/ image / 4.jpg']

© www.soinside.com 2019 - 2024. All rights reserved.