web使用python

时间:2017-08-26 13:34:28

标签: python html-table beautifulsoup screen-scraping

试图从开放获取的学术论文中抓取表格,由于某些原因我无法从本文中删除表格,这就是我所做的,但是得到的ResultSet"表格"是一个空列表。谢谢你的帮助。

from bs4 import BeautifulSoup
import requests

url_page = "http://www.sciencedirect.com/science/article/pii/S0378874116301696"

content = requests.get(url_page).content
soup = BeautifulSoup(content, "lxml")
tables = soup.find_all( "table" )

1 个答案:

答案 0 :(得分:2)

此页面的html中没有静态<table>标记。它是一个基于React的页面,表格是用javascript动态创建的。

编辑:添加脚本以获取数据

要抓取此页面,我会看到两个选项:

  • 根据HåkenLid的建议,您可以使用无头浏览器模拟器,可以执行ghost.py,phantomjs,HtmlUnit,Selenium等javascript。
  • 或者您可以浏览html / javascript源代码,观看浏览器请求并查找数据源。

我更喜欢第二个;此脚本打印页面内容,包括表格中的数据:

# Python 3
import requests, re, json

def discard_format(dico):
    if "_" in dico:
        return dico["_"]
    elif "$$" in dico:
        return dico["$$"]
    elif "$" in dico:
        return ""
    return dico

url_page = "http://www.sciencedirect.com/science/article/pii/S0378874116301696"
req = requests.get(url_page)
html = req.content.decode("utf-8")
token = re.search('"entitledToken":"(.*?)"', html).group(1)
url_data = "http://www.sciencedirect.com/sdfe/arp/pii/S0378874116301696/body?entitledToken=%s" % token
data = requests.get(url_data, cookies=req.cookies).content.decode("utf-8")
#print(data)
jsondata = json.loads(data, object_hook=discard_format)
print(jsondata)