使用bs4使用空白src解析iframe

时间:2016-06-27 06:27:48

标签: python parsing iframe beautifulsoup

一天中的好时光,SO社区。这是我最近遇到的问题:

我在主页上获得了这个HTML源代码:

{{1}}

我已经阅读了许多关于解析iframe的材料,但他们所做的只是从iframe获取src属性并在之后发出另一个请求。我不能在这里做同样的技巧,因为src属性是空白的,网络逻辑位于下面。

我使用的是Python 3.5,bs4和请求。

页面源代码 - enter image description here 框架源代码 - http://collabedit.com/kqp88

如果我分享原始网页,我不知道是否可以...

1 个答案:

答案 0 :(得分:0)

iframe 有一个id,所以只需使用:

h= """<div id="contents_layout">

  <iframe name="contentsFrame" id="contentsFrameID" src=""
  width="100%" height="100%" scrolling="no" frameborder="0"
  marginheight="0" marginwidth="0"></iframe>

  </div>
"""


from bs4 import BeautifulSoup

soup = BeautifulSoup(h)

iframe = soup.select_one("#contentsFrameID")

会给你:

<iframe frameborder="0" height="100%" id="contentsFrameID" marginheight="0" marginwidth="0" name="contentsFrame" scrolling="no" src="" width="100%"></iframe>

您还可以使用空 src 属性:

ifr = soup.select_one("iframe[src=""]")

使用名称:

 ifr = soup.select_one("iframe[name=contentsFrame]")

在您正在抓取的实际网站中,contentsFrameID内的内容是动态创建的,因此您需要selenium之类的内容,以下是动态创建的示例:

from selenium import webdriver
from bs4 import BeautifulSoup
dr =  webdriver.PhantomJS()

dr.get("http://encykorea.aks.ac.kr/Contents/Index?contents_id=E0000089")

soup = BeautifulSoup(dr.page_source)
print(soup.select_one("#contentFrameForm")