python - 使用 BeautifulSoup 从网站获取图像 src

标签 python web-scraping beautifulsoup urllib

我正在尝试从任何网站抓取所有图像 URL。

from bs4 import BeautifulSoup
import urllib.request as urllib2
import re

html_page = urllib2.urlopen("http://imgur.com")
soup = BeautifulSoup(html_page, features="html5lib")
images = []
for img in soup.findAll('img',  limit=None, recursive=True):
    images.append(img.get('src'))

print(images)

这是教程代码,尽管它似乎不起作用。我尝试更改解析器,将限制设置为 None,但它总是只返回两个结果,而此网站上有大量 img 元素

['https://www.facebook.com/tr?id=742377892535530&ev=PageView&noscript=1', 'https://sb.scorecardresearch.com/p?c1=2&c2=22489583&cv=3.6.0&cj=1']

您能告诉我如何获得所有这些吗?

最佳答案

这是因为这个网站需要 javascript 来呈现所有内容。
如果禁用 JavaScript,您将看不到任何内容。
您需要使用一些使用 javascript 的浏览器,例如您可以使用 playwright .

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.webkit.launch(headless=True)
    baseurl = "http://imgur.com"
    page = browser.new_page()
    page.goto(baseurl)
    allImages = page.query_selector_all("//img")
    print("Total images: " + str(len(allImages)))
    for img in allImages:
        print(img.get_attribute("src"))
    browser.close()

输出:

Total images: 43
https://s.imgur.com/desktop-assets/desktop-assets/icon-new-post.13ab64f9f36ad8f25ae3544b350e2ae1.svg
//s.imgur.com/images/favicon-32x32.png
https://s.imgur.com/desktop-assets/desktop-assets/icon-search.8d0f9b564a4659d48d8eca38b968a7f2.svg
https://s.imgur.com/desktop-assets/desktop-assets/icon-filter.551faed00bcf04e07c9e01a6874bd652.svg

关于python - 使用 BeautifulSoup 从网站获取图像 src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72774991/

相关文章:

Python追加添加相同的数据

python - 如何使用pandas实现vlookup交叉引用

javascript - CRONTAB 执行 Python,使用 puppeteer 执行 Node 来进行网页抓取不起作用

python - Selenium Python - 显式等待不起作用

python - BeautifulSoup find - 从感兴趣的 block 中排除嵌套标签

javascript - 如何在 Python 中使用 Javascript 对象文字

python - Python 中的事件监听和处理

python - 确定二维数组中最长连续值范围的最快方法

python - 使用用户名,密码和Cookies进行Python自动网页下载

javascript - 如何克服 Import.io 对具有更多 JavaScript 代码的网站的问题?