脚本在解析链接时给出重复的结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脚本在解析链接时给出重复的结果相关的知识,希望对你有一定的参考价值。
我正在尝试使用以下脚本从网页抓取图像链接,但是当我运行它时,脚本从那里获取两个链接(相同的链接两次)。为什么我会得到如此奇怪的结果?
我需要保持列表理解的格式,因为有几页我可以看到多个图像链接。但是,我不希望使用set()
来踢出那些重复的图像链接。使用选择器时我有什么地方出错吗?
这是我的尝试:
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']
单个链接两次,我不想要。
答案
有两个相同的图像:第一个位于noscript
节点内并隐藏,第二个是可见的。
最好的一个是使用XPath //img[@class="dp-gallery__image" and not(ancestor::noscript)]
,但由于bs4不支持XPath,你可以试试CSS选择器
ul > li > img.dp-gallery__image
另一答案
源网站有两次图像链接,都在同一个类下。
<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]。
以上是关于脚本在解析链接时给出重复的结果的主要内容,如果未能解决你的问题,请参考以下文章