为什么 requests_HTML 只能获取 6 个图片链接?

问题描述

晚上好

大家好,所以我想从这个网站上抓取图片

https://unsplash.com/t/wallpapers

是的,我知道他们确实有 API,但我想先使用我的编码技能,然后再使用 API。

在这是我的代码

from requests_html import HTMLSession

session = HTMLSession()
url ="https://unsplash.com/t/wallpapers"

r = session.get(url)
r.html.render(sleep=3)


images = r.html.find("._2UpQX")

imglinks =[]

for image in images:
 imglinks.append(image.attrs["src"])
 
imglinks

print(imglinks)

我只能获得 6 个图像链接:(

这里是输出的图像以及所述网站的css

输出Output

网站的 CSS:CSS of website

解决方法

我访问了 website 并注意到它只会呈现屏幕中存在的图像,即,当您滚动时,上面的图像将不再呈现,而是呈现新的图像。图片数量也会根据屏幕大小而变化。

我尝试搜索如何发送屏幕尺寸,以便我们可以发送更大的屏幕尺寸,但我找不到任何方法。

但我还有一个想法,我们可以在每次扫描图像的同时继续滚动。

它有效!我得到了 23 个运行以下脚本的图像(实际上每次运行都会有所不同,即使我不知道为什么)

from requests_html import HTMLSession

max_levels = 10
scroll_increment = 10
imglinks = set()

session = HTMLSession()
url = "https://unsplash.com/t/wallpapers"

scroll = 0

for level in range(max_levels):
    print('level',level,'scroll',scroll)
    r = session.get(url)
    r.html.render(scrolldown=scroll)
    scroll += scroll_increment

    images = r.html.find("._2UpQX")
    print('new images found',len(images))

    for image in images:
        imglinks.add(image.attrs["src"])
    print('unique images found till now',len(imglinks))

session.close()

print(imglinks)
print(len(imglinks))

我会让你去探索卷轴的长度,不需要卷轴。

我没有尝试How to Crawl Infinite Scrolling Pages using Python,但它也可能对您有所帮助