如何使用python从angular JS中通过内容呈现来抓取网站

2024-09-28 03:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here我想从网站上抓取内容:https://www.fireant.vn/App#/company-data/ACB

据我所知,tablea的内容我想从Angularjs动态地抓取渲染数据。他们使用ng repeat将时间、体积、价格等所有值传递到表中

</tr><!-- end ngRepeat: quote in intradayQuotes | orderBy: '-Date' --><tr ng-repeat="quote in intradayQuotes | orderBy: '-Date'" class="ng-scope">

这段代码是我能得到的,因为我真的不知道表是什么类型的对象

driver.get('https://www.fireant.vn/App#/company-data/ACB')
driver.set_window_position(0, 0)
driver.set_window_size(100000, 200000)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
soup = BeautifulSoup(driver.page_source, 'lxml')

关于这件事的任何指示都会很有帮助

我想从表中获取的数据 Data from table i want to get

print driver.page_source


Tags: 数据httpsapp内容datawwwdriverwindow
2条回答

您需要在站点上进行一些挖掘,以找到CSS选择器(或者xpath,如果您对xml比较熟悉的话),并使用它来获取您感兴趣的元素/文本

对于Angular(和其他Javascript呈现的内容),您可以直接从webdriver获取数据,而不是使用Beauty soup

例如:

# driver.find_element_by_css_selector('<SELECTOR FOR THE ELEMENTS YOU WANT>')

prices = driver.find_elements_by_class_name('.price').text 
# Returns an array of text of all elements that have the .price class. 

根据您发布的屏幕截图,Price和Time似乎具有相同的HTML元素属性,但是,在本例中,您可以使用XPath索引来检索所需的项目

要检索价格,请执行以下操作:

prices = driver.find_elements_by_xpath("//tbody/tr[2]/td[2]/b[@class='ng-binding']")

根据屏幕截图,“Price”文本似乎位于tbody下的第二个tr元素中,“Price”单元格位于tr下的第二个td元素中。虽然我通常不推荐这种语法,但您的场景是一种特殊情况,其中HTML几乎完全相同

相关问题 更多 >

    热门问题