【问题标题】:How to access the contents of a div with beautifulsoup?如何使用 beautifulsoup 访问 div 的内容?
【发布时间】:2019-11-10 11:54:36
【问题描述】:

我已经启动并运行了 Beautifulsoup,但是在解析网站的 html 时,我的目标是“汤”对象似乎没有显示 div 中的 div 等等。我试图从一个很深的网站获取项目详细信息。查看实际站点 html 时,我可以看到我想要到达的层,但汤只显示父 div,如下所示:

<div id="react-views-container"></div>

如何进入这个 div?

到目前为止,我的代码如下所示:

import urllib.request
import requests
from bs4 import BeautifulSoup

#setting up connection and testing by printig html
proxy_support = urllib.request.ProxyHandler("proxies_hidden_for_privacy")
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
html = urllib.request.urlopen("target_website").read()
print (html)

soup = BeautifulSoup(html)

div = soup.find(id="react-views-container")

【问题讨论】:

  • 您能否分享您要废弃的网站以及您正在查看的div 标签。 ?
  • 是的,我将多次这样做,但网站是 instacart.com。我正在尝试查看某些搜索词返回了哪些项目。一个具体的例子是这个搜索樱桃instacart.com/store/the-fresh-market/search_v3/cherry div 我提到“react-views-container”似乎包含返回项目的网格。我想获得似乎在
    中的返回项目的名称
  • 好的。我正在检查它。很快就会回复你
  • mitch:请将这些问题详细信息移到问题正文中,而不是评论。评论无法编入索引或搜索,它们是短暂的,最终可能会被删除。

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


【解决方案1】:

您可以在下面的代码中直接传递您想要的div id;

soup.find("div", {"id": "id-you-want"})

当您希望 div 包含在 div 中时,这很有效

或者

你甚至可以使用它,

soup.find_all('div')

它将为您提供所有div 的列表。然后你可以过滤掉你想要的div

编辑 ::

在分析网站时,我们可以看到它正在动态加载元素(项目),并且可能是通过 javascript 和一些 XHR 请求进行的。

解决方案

如果您使用scrapyselenium,则可以解决此问题,因为它们使用网络驱动程序,因此使用它们而不是BeautifulSoup 很容易抓取此类网站。

下一个可能的方法是您找到网站为获取项目而调用的 URL(XHR/API)。

注意:我很快就会更新网址

编辑 2:

请求

https://www.instacart.com/v3/containers/sprouts/search_v3/milk?source=web&cache_key=38e8f7-7370-t-35b&per=50&tracking.items_per_row=5&tracking.source_url=undefined&tracking.autocomplete_prefix=&tracking.autocomplete_term_impression_id=&tracking.search_bar_impression_event_id=

这是给response 包含json 格式的项目。您可以从中抓取您的项目。

无法添加响应,因为它很大,而且我的 Google chrome 标签开始挂起 LOL。但我已经验证了

【讨论】:

  • 我以前见过这个,它给了我与我当前代码相同的答案。我可能不清楚,但我不知道如何访问 div 的内容。
    内部发生了很多事情,但它甚至没有出现在汤中。当我尝试搜索可以在其中直观看到的 div id 时,它返回一个 None 对象
  • @mitch 我已经编辑了我之前的答案。你可以检查一下。希望这能解决您的问题
  • @antfuentes87 分享您对更新答案的看法。 :)
  • @0xPrateek 正是我会做的(干得好!)。 json 响应非常容易使用,然后您不必与任何 HTML 混淆(这总是很好)。另一个 +1 是因为不使用 selenium!
  • @0xPrateek 你可能只想举一个完整的例子,所以他明白这只是对那个 API 端点的请求(而不是加载整个网页)。
猜你喜欢
相关资源
最近更新 更多
热门标签