【问题标题】:Getting duplicate links for images in scraping with BeautifulSoup使用 BeautifulSoup 获取图像的重复链接
【发布时间】:2021-12-11 09:42:30
【问题描述】:

我正在抓取一个 Prestashop 网站,我想在其中获取产品所有图像的列表 URL。但是,我得到了重复的值(所有链接都会重复)。我曾尝试创建字典来删除重复项,但它似乎不起作用。 此外,我似乎无法从参考编号中删除跨度标签(展开不起作用) - 它不断返回“无”属性,这令人困惑,因为所有产品都有参考编号。我试过把结果变成一个字符串,但它不让我。

代码如下:

testlink = 'https://trgovina.audiopro.si/si/bas-glave/36037-81020104.html'

r = requests.get(testlink)
soup = BeautifulSoup(r.content, 'html.parser')
imagelinks = []
name = soup.find('h1', class_='product_name').text.strip()
reference = soup.find('div', class_='product-reference_top product-reference')
reference_number = reference.find('span')
images = soup.find_all('li', class_='thumb-container')
for item in images:
    image = item.find('img').attrs['src']
    imagelinks.append(image)
print(imagelinks)

【问题讨论】:

  • 你可以添加导入包的部分吗?会更容易调试。
  • 为什么不使用.text来删除标签。
  • 您始终可以使用set() 而不是列表[] 来删除重复项。

标签: python image web-scraping beautifulsoup


【解决方案1】:

使用.text获取不带标签的号码<span>

reference_number = reference.find('span').text

使用set()而不是列表来跳过重复项

imagelinks = set()

# ... 

    imagelinks.add(image)

完整的工作代码:

import requests
from bs4 import BeautifulSoup

testlink = 'https://trgovina.audiopro.si/si/bas-glave/36037-81020104.html'

r = requests.get(testlink)
soup = BeautifulSoup(r.content, 'html.parser')

imagelinks = set()

name = soup.find('h1', class_='product_name').text.strip()

reference = soup.find('div', class_='product-reference_top product-reference')
reference_number = reference.find('span').text
print(reference_number)

images = soup.find_all('li', class_='thumb-container')

for item in images:
    image = item.find('img').attrs['src']
    imagelinks.add(image)

print(imagelinks)
print('len:', len(imagelinks))


编辑:

或者你应该只从<div id="thumb_box">获取图片

使用find().find_all()

images = soup.find('div', {'id':'thumb_box'}).find_all('li', class_='thumb-container')

或使用CSS selector

images = soup.select('div#thumb_box li.thumb-container')

import requests
from bs4 import BeautifulSoup

testlink = 'https://trgovina.audiopro.si/si/bas-glave/36037-81020104.html'

r = requests.get(testlink)
soup = BeautifulSoup(r.content, 'html.parser')

imagelinks = []

name = soup.find('h1', class_='product_name').text.strip()

reference = soup.find('div', class_='product-reference_top product-reference')
reference_number = reference.find('span').text
print(reference_number)

images = soup.find('div', {'id':'thumb_box'}).find_all('li', class_='thumb-container')
#images = soup.select('div#thumb_box li.thumb-container')

for item in images:
    image = item.find('img').attrs['src']
    imagelinks.append(image)

print(imagelinks)
print('len:', len(imagelinks))

【讨论】:

  • 我在CSS selector添加了一行
猜你喜欢
  • 2019-12-30
  • 2020-04-30
  • 2017-08-04
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多