python urllib2 - 在加载表后读取页面

时间:2018-04-10 16:40:30

标签: python html urllib2

我正在尝试使用urllib2读取页面,以便从页面中提取数据。从网站更新后,我认为我感兴趣的表现在是每次加载生成的,当我用urllib2读取url时,这个表在我得到的html中是空的。

我目前的代码是:

url = 'http://www.cmegroup.com/trading/energy/natural-gas/lng-japan-korea-marker-platts-swap.html' 
req = urllib2.Request(url, headers = hdr)
html = urllib2.urlopen(req).read()
soup = BeautifulSoup(html, "html.parser")
table = soup.find_all(id="quotesFuturesProductTable1")[0]

其他信息的标题:

hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
    'Accept-Encoding': 'none',
    'Accept-Language': 'en-US,en;q=0.8',
    'Connection': 'keep-alive'}

我得到了桌子,但它是空的。我知道我可能不得不在页面中调用另一个脚本,但无法找出哪一个。

2 个答案:

答案 0 :(得分:0)

您提到的数据似乎位于MERGE INTO NewTable AS T USING ( SELECT DISTINCT ID,statusID FROM testtable ) AS S ON S.ID = T.ID WHEN MATCHED THEN SET T.StatusID = 2 WHEN NOT MATCHED INSERT (ID,statusID) VALUES (S.ID,S.statusID) ;

你很幸运,那已经是JSON了,所以你甚至不需要BeautifulSoup,你只需要用http://www.cmegroup.com/CmeWS/mvc/Quotes/Future/7049/G模块解析它。您的代码变为:

json

不要忘记url = "http://www.cmegroup.com/CmeWS/mvc/Quotes/Future/7049/G" req = urllib2.Request(url, headers=hdr) data = urllib2.urlopen(req).read() parsed_data = json.loads(data) 导入!我还应该提一下优秀的requests包,它具有比json更简单的API,并且免费提供JSON解析。

注意:这有点弱,因为它会在更改网址后立即中断,但网页抓取这是一个非常不可避免的问题。

答案 1 :(得分:0)

由于网站是动态的,您可以使用selenium触发前端脚本来填充DOM:

from selenium import webdriver
from bs4 import BeautifulSoup as soup
import re
d = webdriver.Chrome()
d.get('http://www.cmegroup.com/trading/energy/natural-gas/lng-japan-korea-marker-platts-swap.html')
table_data = [i.text for i in soup(d.page_source, 'lxml').find_all(re.compile('th|td'))]
header = table_data[7:18]
table = table_data[18:]
final_data = [dict(zip(header, table[i:i+12])) for i in range(0, len(table), 12)]

输出:

[{u'Volume': u'0', u'Updated': u'08:18:58 CT 10 Apr 2018', u'Hi / Low Limit': u'7.975 / 4.975', u'Last': u'-', u'Prior Settle': u'7.155', u'Charts': u'\n\nShow Price Chart\n\n', u'Month': u'\nMAY 2018\n', u'High': u'-', u'Low': u'-', u'Open': u'-', u'Change': u'-'}, {u'Volume': u'7.600 / 4.600', u'Updated': u'\nJUL 2018\n', u'Hi / Low Limit': u'08:18:58 CT 10 Apr 2018', u'Last': u'-', u'Prior Settle': u'-', u'Charts': u'-', u'Month': u'\n\nShow Price Chart\n\n', u'High': u'-', u'Low': u'0', u'Open': u'-', u'Change': u'7.525'}, {u'Volume': u'08:18:58 CT 10 Apr 2018', u'Updated': u'\n\nShow Price Chart\n\n', u'Hi / Low Limit': u'\nAUG 2018\n', u'Last': u'7.575', u'Prior Settle': u'-', u'Charts': u'-', u'Month': u'-', u'High': u'0', u'Low': u'7.575 / 4.575', u'Open': u'-', u'Change': u'-'}, {u'Volume': u'\nSEP 2018\n', u'Updated': u'-', u'Hi / Low Limit': u'\n\nShow Price Chart\n\n', u'Last': u'-', u'Prior Settle': u'-', u'Charts': u'7.600', u'Month': u'-', u'High': u'7.540 / 4.540', u'Low': u'08:18:58 CT 10 Apr 2018', u'Open': u'0', u'Change': u'-'}, {u'Volume': u'\n\nShow Price Chart\n\n', u'Updated': u'-', u'Hi / Low Limit': u'-', u'Last': u'-', u'Prior Settle': u'0', u'Charts': u'-', u'Month': u'7.650', u'High': u'08:18:58 CT 10 Apr 2018', u'Low': u'\nOCT 2018\n', u'Open': u'7.540 / 4.540', u'Change': u'-'}, {u'Volume': u'-', u'Updated': u'8.750', u'Hi / Low Limit': u'-', u'Last': u'-', u'Prior Settle': u'7.740 / 4.740', u'Charts': u'-', u'Month': u'-', u'High': u'\nNOV 2018\n', u'Low': u'\n\nShow Price Chart\n\n', u'Open': u'08:18:58 CT 10 Apr 2018', u'Change': u'0'}, {u'Volume': u'-', u'Updated': u'-', u'Hi / Low Limit': u'9.225', u'Last': u'0', u'Prior Settle': u'08:18:58 CT 10 Apr 2018', u'Charts': u'-', u'Month': u'-', u'High': u'\n\nShow Price Chart\n\n', u'Low': u'-', u'Open': u'\nDEC 2018\n', u'Change': u'8.500 / 5.500'}, {u'Volume': u'9.700', u'Updated': u'-', u'Hi / Low Limit': u'-', u'Last': u'8.960 / 5.960', u'Prior Settle': u'\nJAN 2019\n', u'Charts': u'0', u'Month': u'-', u'High': u'-', u'Low': u'-', u'Open': u'\n\nShow Price Chart\n\n', u'Change': u'08:18:58 CT 10 Apr 2018'}, {u'Volume': u'-', u'Updated': u'-', u'Hi / Low Limit': u'-', u'Last': u'08:18:58 CT 10 Apr 2018', u'Prior Settle': u'\n\nShow Price Chart\n\n', u'Charts': u'9.100 / 6.100', u'Month': u'0', u'High': u'-', u'Low': u'9.325', u'Open': u'-', u'Change': u'\nFEB 2019\n'}, {u'Volume': u'-', u'Updated': u'0', u'Hi / Low Limit': u'-', u'Last': u'\nMAR 2019\n', u'Prior Settle': u'-', u'Charts': u'08:18:58 CT 10 Apr 2018', u'Month': u'9.150 / 6.150', u'High': u'9.175', u'Low': u'-', u'Open': u'-', u'Change': u'\n\nShow Price Chart\n\n'}, {u'Volume': u'-', u'Updated': u'8.215 / 5.215', u'Hi / Low Limit': u'0', u'Last': u'\n\nShow Price Chart\n\n', u'Prior Settle': u'-', u'Charts': u'\nAPR 2019\n', u'Month': u'08:18:58 CT 10 Apr 2018', u'High': u'-', u'Low': u'-', u'Open': u'7.555', u'Change': u'-'}, {u'Volume': u'0', u'Updated': u'08:18:58 CT 10 Apr 2018', u'Hi / Low Limit': u'7.670 / 4.670', u'Last': u'-', u'Prior Settle': u'7.000', u'Charts': u'\n\nShow Price Chart\n\n', u'Month': u'\nMAY 2019\n', u'High': u'-', u'Low': u'-', u'Open': u'-', u'Change': u'-'}, {u'Volume': u'7.245 / 4.245', u'Updated': u'\nJUL 2019\n', u'Hi / Low Limit': u'08:18:58 CT 10 Apr 2018', u'Last': u'-', u'Prior Settle': u'-', u'Charts': u'-', u'Month': u'\n\nShow Price Chart\n\n', u'High': u'-', u'Low': u'0', u'Open': u'-', u'Change': u'6.745'}, {u'Volume': u'08:18:58 CT 10 Apr 2018', u'Updated': u'\n\nShow Price Chart\n\n', u'Hi / Low Limit': u'\nAUG 2019\n', u'Last': u'6.750', u'Prior Settle': u'-', u'Charts': u'-', u'Month': u'-', u'High': u'0', u'Low': u'6.920 / 3.920', u'Open': u'-', u'Change': u'-'}, {u'Volume': u'\nSEP 2019\n', u'Updated': u'-', u'Hi / Low Limit': u'\n\nShow Price Chart\n\n', u'Last': u'-', u'Prior Settle': u'-', u'Charts': u'6.750', u'Month': u'-', u'High': u'6.920 / 3.920', u'Low': u'08:18:58 CT 10 Apr 2018', u'Open': u'0', u'Change': u'-'}, {u'Volume': u'\n\nShow Price Chart\n\n', u'Updated': u'-', u'Hi / Low Limit': u'-', u'Last': u'-', u'Prior Settle': u'0', u'Charts': u'-', u'Month': u'6.900', u'High': u'08:18:58 CT 10 Apr 2018', u'Low': u'\nOCT 2019\n', u'Open': u'6.920 / 3.920', u'Change': u'-'}, {u'Volume': u'-', u'Updated': u'7.900', u'Hi / Low Limit': u'-', u'Last': u'-', u'Prior Settle': u'7.220 / 4.220', u'Charts': u'-', u'Month': u'-', u'High': u'\nNOV 2019\n', u'Low': u'\n\nShow Price Chart\n\n', u'Open': u'08:18:58 CT 10 Apr 2018', u'Change': u'0'}, {u'Volume': u'-', u'Updated': u'-', u'Hi / Low Limit': u'8.510', u'Last': u'0', u'Prior Settle': u'08:18:58 CT 10 Apr 2018', u'Charts': u'-', u'Month': u'-', u'High': u'\n\nShow Price Chart\n\n', u'Low': u'-', u'Open': u'\nDEC 2019\n', u'Change': u'7.965 / 4.965'}, {u'Volume': u'8.215', u'Updated': u'-', u'Hi / Low Limit': u'-', u'Last': u'8.415 / 5.415', u'Prior Settle': u'\nJAN 2020\n', u'Charts': u'0', u'Month': u'-', u'High': u'-', u'Low': u'-', u'Open': u'\n\nShow Price Chart\n\n', u'Change': u'08:18:58 CT 10 Apr 2018'}, {u'Volume': u'-', u'Updated': u'-', u'Hi / Low Limit': u'-', u'Last': u'18:18:21 CT 09 Apr 2018', u'Prior Settle': u'\n\nShow Price Chart\n\n', u'Charts': u'No Limit / No Limit', u'Month': u'0', u'High': u'-', u'Low': u'8.065', u'Open': u'-', u'Change': u'\nFEB 2020\n'}, {u'Volume': u'-', u'Updated': u'0', u'Hi / Low Limit': u'-', u'Last': u'\nMAR 2020\n', u'Prior Settle': u'-', u'Charts': u'18:18:26 CT 09 Apr 2018', u'Month': u'No Limit / No Limit', u'High': u'7.965', u'Low': u'-', u'Open': u'-', u'Change': u'\n\nShow Price Chart\n\n'}, {u'Volume': u'-', u'Updated': u'No Limit / No Limit', u'Hi / Low Limit': u'0', u'Last': u'\n\nShow Price Chart\n\n', u'Prior Settle': u'-', u'Charts': u'\nAPR 2020\n', u'Month': u'18:18:26 CT 09 Apr 2018', u'High': u'-', u'Low': u'-', u'Open': u'7.360', u'Change': u'-'}, {u'Volume': u'0', u'Updated': u'18:18:25 CT 09 Apr 2018', u'Hi / Low Limit': u'No Limit / No Limit', u'Last': u'-', u'Prior Settle': u'6.805', u'Charts': u'\n\nShow Price Chart\n\n', u'Month': u'\nMAY 2020\n', u'High': u'-', u'Low': u'-', u'Open': u'-', u'Change': u'-'}, {u'Volume': u'No Limit / No Limit', u'Updated': u'\nJUL 2020\n', u'Hi / Low Limit': u'18:18:39 CT 09 Apr 2018', u'Last': u'-', u'Prior Settle': u'-', u'Charts': u'-', u'Month': u'\n\nShow Price Chart\n\n', u'High': u'-', u'Low': u'0', u'Open': u'-', u'Change': u'6.550'}, {u'Volume': u'18:18:38 CT 09 Apr 2018', u'Updated': u'\n\nShow Price Chart\n\n', u'Hi / Low Limit': u'\nAUG 2020\n', u'Last': u'6.500', u'Prior Settle': u'-', u'Charts': u'-', u'Month': u'-', u'High': u'0', u'Low': u'No Limit / No Limit', u'Open': u'-', u'Change': u'-'}, {u'Volume': u'\nSEP 2020\n', u'Updated': u'-', u'Hi / Low Limit': u'\n\nShow Price Chart\n\n', u'Last': u'-', u'Prior Settle': u'-', u'Charts': u'6.500', u'Month': u'-', u'High': u'No Limit / No Limit', u'Low': u'18:18:39 CT 09 Apr 2018', u'Open': u'0', u'Change': u'-'}, {u'Volume': u'\n\nShow Price Chart\n\n', u'Updated': u'-', u'Hi / Low Limit': u'-', u'Last': u'-', u'Prior Settle': u'0', u'Charts': u'-', u'Month': u'6.655', u'High': u'18:18:44 CT 09 Apr 2018', u'Low': u'\nOCT 2020\n', u'Open': u'No Limit / No Limit', u'Change': u'-'}, {u'Volume': u'-', u'Updated': u'7.660', u'Hi / Low Limit': u'-', u'Last': u'-', u'Prior Settle': u'No Limit / No Limit', u'Charts': u'-', u'Month': u'-', u'High': u'\nNOV 2020\n', u'Low': u'\n\nShow Price Chart\n\n', u'Open': u'18:18:31 CT 09 Apr 2018', u'Change': u'0'}, {u'Volume': u'-', u'Updated': u'-', u'Hi / Low Limit': u'8.265', u'Last': u'0', u'Prior Settle': u'18:18:25 CT 09 Apr 2018', u'Charts': u'-', u'Month': u'-', u'High': u'\n\nShow Price Chart\n\n', u'Low': u'-', u'Open': u'\nDEC 2020\n', u'Change': u'No Limit / No Limit'}, {u'Volume': u'\nJUL 2018\n', u'Updated': u'\nSEP 2018\n', u'Hi / Low Limit': u'\nAUG 2018\n', u'Last': u'No Limit / No Limit', u'Prior Settle': u'\n\nMonth\n\n', u'Charts': u'0', u'Month': u'-', u'High': u'\nMAY 2018\n', u'Low': u'\nJUN 2018\n', u'Open': u'Month', u'Change': u'18:18:25 CT 09 Apr 2018'}, {u'Volume': u'\nJUL 2019\n', u'Updated': u'\nSEP 2019\n', u'Hi / Low Limit': u'\nAUG 2019\n', u'Last': u'\nJAN 2019\n', u'Prior Settle': u'\nMAR 2019\n', u'Charts': u'\nDEC 2018\n', u'Month': u'\nNOV 2018\n', u'High': u'\nMAY 2019\n', u'Low': u'\nJUN 2019\n', u'Open': u'\nAPR 2019\n', u'Change': u'\nFEB 2019\n'}, {u'Volume': u'\nJUL 2020\n', u'Updated': u'\nSEP 2020\n', u'Hi / Low Limit': u'\nAUG 2020\n', u'Last': u'\nJAN 2020\n', u'Prior Settle': u'\nMAR 2020\n', u'Charts': u'\nDEC 2019\n', u'Month': u'\nNOV 2019\n', u'High': u'\nMAY 2020\n', u'Low': u'\nJUN 2020\n', u'Open': u'\nAPR 2020\n', u'Change': u'\nFEB 2020\n'}, {u'Volume': u'', u'Updated': u'', u'Hi / Low Limit': u'', u'Last': u'', u'Prior Settle': u'', u'Charts': u'\nDEC 2020\n', u'Month': u'\nNOV 2020\n', u'High': u'', u'Low': u'', u'Open': u'', u'Change': u''}, {u'Last': u'', u'Charts': u'', u'Change': u'', u'Month': u''}]