使用bs4剥离表

时间:2016-11-14 11:00:51

标签: python html web-scraping beautifulsoup pycharm

所以我有以下网页:

http://dservuk.tns-global.com/TNSMLBofA-dec3c1fd-0bed-4505-9c4b-869c4efc19a1/FM/May2015-031ea442-6906-4e1d-963e-c02bbce6c7a9/mltables.html?section=SCA#tables

http://dservuk.tns-global.com/TNSMLBofA-dec3c1fd-0bed-4505-9c4b-869c4efc19a1/FM/May2015-031ea442-6906-4e1d-963e-c02bbce6c7a9/mltables.html?section=SCA#tables

我想只将表格剥离成数据框架或其他一些我可以使用的结构,最终目标是我可以轻松地遍历类似的网页,然后连接所有结果,以便我可以将它们放入电子表格中。

我完全迷失了,教程都指向我过时的图书馆。我正在使用Python 3.4和PyCharm Community Edition 2016.2.3。我们假设我没有当前的代码。

1 个答案:

答案 0 :(得分:1)

您需要使用类似Selenium的内容来获取您尝试访问的网站的HTML,因为它需要Javascript来生成页面。以下内容应该有助于您入门:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

url = 'http://dservuk.tns-global.com/TNSMLBofA-dec3c1fd-0bed-4505-9c4b-869c4efc19a1/FM/May2015-031ea442-6906-4e1d-963e-c02bbce6c7a9/mltables.html?section=SCA#tables'

browser = webdriver.Firefox(firefox_binary=FirefoxBinary())
browser.get(url)
soup = BeautifulSoup(browser.page_source, "html.parser")
browser.quit()

for table in soup.find_all('table', class_='mrTable')[1:]:
    for tr in table.find_all('tr'):
        print [td.text for td in tr.find_all('td')]

这将按如下方式显示每一行:

[u'', u'Breakdown']
[u'', u'Global Specialists Only', u'Regional Specialists with a Global View', u'Regional Specialists Only', u'Global Total', u'GEM Specialists', u'Regional Total', u'Grand Total']
[u' ', u'', u'', u'', u'', u'', u'', u'']
[u'', u'', u'', u'', u'', u'', u'']
[u'', u'', u'', u'', u'', u'', u'']
[u'Chief Investment Officer', u'', u'', u'', u'', u'', u'', u'']
[u'11%', u'13%', u'11%', u'11%', u'33%', u'12%', u'12%']
[u'', u'', u'', u'', u'', u'', u'']
[u'Asset Allocator / Strategist / Economist', u'', u'', u'', u'', u'', u'', u'']
[u'41%', u'25%', u'8%', u'36%', u'0%', u'19%', u'31%']
[u'', u'', u'', u'', u'', u'', u'']
[u'Portfolio Manager', u'', u'', u'', u'', u'', u'', u'']
[u'40%', u'55%', u'61%', u'45%', u'67%', u'57%', u'48%']
[u'', u'', u'', u'', u'', u'', u'']
[u'Other', u'', u'', u'', u'', u'', u'', u'']
[u'8%', u'7%', u'19%', u'8%', u'0%', u'12%', u'10%']
[u'', u'', u'', u'', u'', u'', u'']