【问题标题】:Nested hidden tags scraping in pythonpython中的嵌套隐藏标签抓取
【发布时间】:2019-07-23 21:04:35
【问题描述】:

首先,python 和网络抓取非常新。

我有一个需要抓取的页面。我查看了很多资源,但无法弄清楚嵌套隐藏标签的抓取。该页面需要登录并能够获取我的代码成功执行的可见数据。但是,在抓取 div 标记中的嵌套元素时,它什么也找不到。

HTML(在 onClick() 事件之前)

<div id="topMenu" style="width: 1920px; position: relative; top: 46px;" onclick="menu(event);" oncontextmenu="javascript:if(!event.ctrlKey){return RightClickPopUp(event);}">
   <span id="3" class="cSub" lcid="63" lccl="Item" style="visibility: hidden; display: none; top: 20px;"> 
        <span id="1" menuname="Cancel" parentid="63" class="Menu01" showmenu="010">Cancel</span>
   </span>

   <span id="3" class="cSub" lcid="63" lccl="Item" style="visibility: hidden; display: none; top: 20px;"> 
        <span id="1" menuname="Cancel" parentid="63" class="Menu01" showmenu="010">Cancel</span>
   </span>
</div>

单击div(由多个按钮组成)后,第一个span 标记变为可见,然后跳转到相应的嵌套span 标记。我的问题是访问最里面的span中的文字。

HTML(在 onClick() 事件之后)

<div id="topMenu" style="width: 1920px; position: relative; top: 46px;" onclick="menu(event);" oncontextmenu="javascript:if(!event.ctrlKey){return RightClickPopUp(event);}">
     <span id="3" class="cSub" lcid="63" lccl="Item" style="visibility: visible; display: inline; top: 20px;"> 
          <span id="1" menuname="Cancel" parentid="63" class="Menu01" showmenu="010">Cancel</span>
     </span>

      <span id="3" class="cSub" lcid="63" lccl="Item" style="visibility: visible; display: inline; top: 20px;"> 
          <span id="1" menuname="Cancel" parentid="63" class="Menu01" showmenu="010">Cancel</span>
      </span>
</div>

Python 代码

import mechanize 
from bs4 import BeautifulSoup
import urllib
import http.cookiejar as cookielib
from bs4 import BeautifulSoup as soup


cj = cookielib.CookieJar()
br = mechanize.Browser()

br.set_cookiejar(cj)
br.open("LOGIN_URL")

br.select_form(nr=0)
br.form['USER'] = 'un'
br.form['PASSWORD'] = 'pwd'
br.submit()

check = br.response().read()
print(check) //login success 

my_url = br.open("URL_I_NEED_TO_SCRAPE").read()
page_soup = soup(my_url, "html.parser")
containers = page_soup.find("div",{"id":"topMenu"})

这段代码帮助我获得了div,但里面什么都没有。有没有办法获取当前隐藏在这个div 中的spans

【问题讨论】:

  • 您是否尝试过简单的 items = soup.select("#topMenu [id='1']") 我想部分取决于您是否需要在页面上进行实际操作以启用这些选择.
  • 它是空的。这就是我得到的:[]
  • 你可能需要像 selenium 这样的东西来与页面交互。
  • 你的预期输出是什么?
  • 最里面的 span @JackFleeting 内的文本

标签: python web-scraping beautifulsoup mechanize


【解决方案1】:

有很多方法可以提取内部隐藏元素,例如 span、src 和 alt 标签。

containers = page_soup.find("div",{"id":"topMenu"})
top_span=containers.find_all('span',class_='cSub')
print(len(top_span)
#len of spans is two
inner_span=top_span[0].find('span')
inner_span_text=inner_span.text
class_inside_inner_span=inner_span['class']

有关网络抓取的更多详细信息,请关注我的这篇文章:“https://github.com/rajat4665/web-scraping-with-python

【讨论】:

  • 当我打印这个长度时,它输出 0。它仍然以某种方式没有得到跨度
  • 嗨,凯特琳,我完全不知道为什么你的跨度为零,但据我所知,你可能选择了错误的类名。
  • 我已经找到了使用 selenium 的解决方案
猜你喜欢
  • 1970-01-01
  • 2014-05-11
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
相关资源
最近更新 更多