我正在尝试从https://www.zacks.com/stock/research/amzn/earnings-announcements
获取“收入通知表”我正在使用不同的beautifulsoup选项,但没有人拿到桌子。
>set PYTEST_TMPDIR=./tmp
>python.exe -m pytest -q -s test_my_db.py
* c:\tests\tmp\data1_0\db1.db
.* c:\tests\tmp\data2_0\db2.db
.
2 passed in 10.03 seconds
当我检查表格时,表格的元素就在那里。
我正在粘贴我为表格获取的部分代码(js,json?)。
table = soup.find('table', attrs={'class': 'earnings_announcements_earnings_table'})
table = soup.find_all('table')
我怎么能得到这张桌子? 谢谢!
答案 0 :(得分:0)
所以解决方案是使用Python的字符串和RegExp函数而不是BeautifulSoup来解析整个HTML文档,因为我们不是试图从HTML标记中获取数据,而是希望将它们放在JS代码中。
所以这个代码基本上是把JS数组放在“earnings_announcements_earnings_table”里面,因为JS数组与Python的列表结构相同,我只是用ast解析它。结果是一个列表,你可以循环进入,它显示来自表的所有页面的所有数据。
import urllib2
import re
import ast
user_agent = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'}
req = urllib2.Request('https://www.zacks.com/stock/research/amzn/earnings-announcements', None, user_agent)
source = urllib2.urlopen(req).read()
compiled = re.compile('"earnings_announcements_earnings_table"\s+\:', flags=re.IGNORECASE | re.DOTALL)
match = re.search(compiled, source)
if match:
source = source[match.end(): len(source)]
compiled = re.compile('"earnings_announcements_webcasts_table"', flags=re.IGNORECASE | re.DOTALL)
match = re.search(compiled, source)
if match:
source = source[0: match.start()]
result = ast.literal_eval(str(source).strip('\r\n\t, '))
print result
如果您需要澄清,请告诉我。