如何通过网络抓取JavaScript生成的内容?

时间:2019-10-20 22:59:44

标签: python beautifulsoup

我想抓取“财务报表附注”下的所有内容。我怎样才能做到这一点?这是网页的链接:Please Click

这是屏幕截图:Screenshot

单击链接后,将生成“财务报表附注”下的每个项目。我想获取每个项目的来源并进行解析,例如,“重要会计政策摘要。

谢谢!

已更新:2019-10-22

现在,我的问题归结为如何从以下内容中提取ID(即r9,r10等)。它位于

  • 之一,其类=“手风琴”。
  • 中有一个href =“#” id =“ menu_cat2”。

    不是最好的代码。这是我设法做到的:

       lis = soup.select("li.accordion")
       notes = [str(li) for li in lis if "menu_cat3" in str(li)]
       ids = re.findall(r'id="(r\d+)"', notes[0])
    

    source

  • 2 个答案:

    答案 0 :(得分:2)

    您可以使用硒或刮擦 https://selenium-python.readthedocs.io/index.html

    方法:

    https://selenium-python.readthedocs.io/navigating.html

    导航到该链接 单击该html元素-可以通过使用xpath或CSS选择器来完成 获取文字内容

    答案 1 :(得分:1)

    页面基于该部分中lis的ID发出请求。收集ID,将其转换为大写并发出相同的请求。需要bs4 4.7.1 +

    from bs4 import BeautifulSoup as bs
    import requests
    
    with requests.Session() as s:
        s.headers = {'User-Agent':'Mozilla/5.0'}
        r = s.get('https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-18-000145&xbrl_type=v#')
        soup = bs(r.content, 'lxml')
        urls = [f'https://www.sec.gov/Archives/edgar/data/320193/000032019318000145/{i["id"].upper()}.htm' for i in soup.select('li:has(#menu_cat3) .accordion')]
    
        for url in urls:
            r = s.get(url)
            soup = bs(r.content, 'lxml')
            print([i.text for i in soup.select('font')])