脚本在解析链接时给出重复的结果

时间:2018-10-29 07:46:37

标签: python python-3.x web-scraping beautifulsoup

我正在尝试使用以下脚本从网页上抓取图像链接,但是当我运行它时,脚本会从那里获取两个链接(两次相同的链接)。为什么我会得到如此奇怪的结果?

我需要维护列表理解的格式,因为很少有页面可以看到多个图像链接。但是,我也不希望使用set()来踢掉那些重复的图像链接。使用选择器时哪里出问题了?

Link to that webpage

这是我的尝试:

import requests
from bs4 import BeautifulSoup

url = "check_out_the_link_above"

def get_image_links(s,link):
    s.headers["User-Agent"] = "Mozilla/5.0"
    res = s.get(link)
    soup = BeautifulSoup(res.text,"lxml")
    images = [item.get("src") for item in soup.select("img.dp-gallery__image")]
    print(images)

if __name__ == '__main__':
    with requests.Session() as s:
        get_image_links(s,url)

我得到的结果:

['https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg', 'https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg']

一个我不想的链接两次。

2 个答案:

答案 0 :(得分:1)

有两个相同的图像:第一个位于noscript节点内并且隐藏,第二个可见。

最好的方法是使用XPath //img[@class="dp-gallery__image" and not(ancestor::noscript)],但是由于bs4不支持XPath,因此可以尝试CSS选择器

ul > li > img.dp-gallery__image

答案 1 :(得分:0)

源网站在同一类中有两次图片链接。

<noscript>
    <li class="dp-gallery__list-item dp-gallery__list-item--orphan">
        <img src="https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg" class="dp-gallery__image" alt="Swale Avenue, Peterborough, Cambridgeshire. PE4">
    </li>
</noscript>

    <li class="dp-gallery__list-item dp-gallery__list-item--orphan">
        <img src="https://lid.zoocdn.com/645/430/f8eaf79c39145242e9a30e8d550972e07c0d15a1.jpg" class="dp-gallery__image" alt="Swale Avenue, Peterborough, Cambridgeshire. PE4">
    </li>

如果您想避免第二个,我会在搜索中添加另一个过滤器,以确保仅得到其中一个。

假设内存不是一个大问题,那么更简单的解决方案就是拍摄图像[0]。

相关问题