所以我试图在这里解析一个页面上的所有href链接:https://data-wake.opendata.arcgis.com/datasets但是我注意到我正在寻找的链接都没有从我的python代码返回:
driver = webdriver.PhantomJS("C:\Users\Jlong\Desktop\phantomjs.exe")
driver.get(r"https://data-wake.opendata.arcgis.com/datasets")
pagesource = driver.page_source
bsobj = BeautifulSoup(pagesource,'lxml')
for line in bsobj.find_all('a'):
print(line.get('href'))
以下是chromes检查的html片段: Html Inspect
预期的结果是返回如下内容:
" /数据集/ wakeforestnc ::状态系统用街道"
我还注意到在页面上运行了一个名为Ember application.js的东西,我想这可能会阻止我访问深嵌入主ember标记的href属性。我不喜欢使用ember或如何解析像这样的复杂页面,任何帮助都将非常感谢!
答案 0 :(得分:0)
Ember.js用于构建SPA(单页应用程序),通常是客户端呈现。
我的猜测是你的代码在页面加载后但在SPA渲染之前搜索所有锚点。
您的代码需要等待Ember应用程序呈现,可能要等到body
元素具有类ember-application
。
答案 1 :(得分:0)
我相信你在前端渲染之前得到了page_source。
我通过chromedriver获取这些链接(对于phantomjs应该是相同的),只需在访问wait
之前添加一个简单的page_source
:
from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver = webdriver.Chrome()
driver.get("https://data-wake.opendata.arcgis.com/datasets")
time.sleep(5)
soup = BeautifulSoup(driver.page_source,'lxml')
for line in soup.find('ul', {'id':'search-results'}).find_all('a', {'class': 'result-name ember-view'}):
print(line.get('href'))
<强>输出强>:
/datasets/tofv::fuquay-varina-utility-as-built-drawings
/datasets/tofv::private-sewer-manhole
/datasets/tofv::fuquay-varina-town-development
/datasets/tofv::blowoff-valve
/datasets/tofv::fuquay-varina-zoning
/datasets/tofv::drainage-point
/datasets/tofv::gravity-sewer-line
/datasets/tofv::water-meter-vault
/datasets/tofv::fuquay-varina-sidewalks
/datasets/tofv::water-line