【问题标题】:Beautifulsoup scrape not showing everythingBeautifulsoup 刮擦没有显示所有内容
【发布时间】:2020-03-02 01:05:07
【问题描述】:

我正在尝试从第一张图片中获取 img 标签,以便获取图片链接。 当我用 beautifulsoup 抓取网站时,没有 img 标签(在图 2 中)。

我不明白为什么网站每个都有一个 img 标签,但 beautifulsoup 没有。

【问题讨论】:

  • 您的一些代码会有所帮助。
  • 您能否尝试仅从 all_prod 中的一个元素打印代码,看看它是否显示了您要查找的内容?试试: print(str(all_prod[0]))
  • 我尝试打印第一个索引,但它没有返回 img 标签。它具有除 img 之外的 li 标签之一的所有内容。我在 ebay 和其他一些网站上做过同样的事情,没有任何问题。

标签: python beautifulsoup


【解决方案1】:

在获得用户输入之前,图像可能不会加载到网站上。

例如,如果您必须单击下拉菜单或下一个箭头才能查看网站上的图像,那么它可能会对该图像发出新请求并更新网站上的 html。

另一个问题可能是 JavaScript。网站通常具有在页面首次加载后运行的 JavaScript 代码。然后,Javascript 会发出额外的请求来更新页面上的元素。

要查看网站上发生的情况,请在您的浏览器中按 F12 进入网站。转到网络选项卡并重新加载页面。您将看到所有请求的 url。

如果您需要获取由 Javascript 请求加载的数据,请尝试使用 Selenium。

更新

我去了您发布的网站并使用以下代码仅提取了 html。

import requests
page = requests.get("https://auburn.craigslist.org/search/sss?query=test")
print(page.text)

请求返回您在任何 Javascript 和其他请求运行之前获得的 html。可以看here

图片网址也不在其中。这意味着在初始请求中不返回图像 html。我们看到的是数据标签,见 pastebin 的第 2192 行。 JavaScript 通常使用这些来发出额外的请求,因此它知道要获取哪些图像。

结果:您要查找的 img 标签不在您的请求返回的 html 中。 Selenium 将在这里为您提供帮助,或者调查他们的 javascript 如何使用这些数据 ID 来确定要请求哪些图像。

【讨论】:

  • 我尝试了你所说的,在加载图像之前有一些 javascript,但我将它与我已经完成的 eBay 刮擦进行了比较。看起来他们做同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 2019-05-14
相关资源
最近更新 更多