【问题标题】:Is there any way to scrap value for a webpage which fetch its vaue from API有什么方法可以废除从 API 获取其价值的网页的价值
【发布时间】:2022-11-23 23:41:52
【问题描述】:

我正在做一个项目,我必须从 url= "https://www.screener.in/company/ITC/consolidated/" 的源代码中获取 '6596626'。 该值在网页上不可见,因此很难使用 xpath 提取。 下面的代码是页面源代码的一部分,它具有我想要提取的值。

   <div
     data-company-id="1552"
     data-warehouse-id="6596626"
     data-user-is-registered="true"
     data-consolidated="true"
     id="company-info">
    </div>

这是我试过的代码,我希望直接从源代码中提取值,但没有结果。

    from urllib import request
    from bs4 import BeautifulSoup
    from lxml import etree

    symbol=input("Enter symbol of the company\n")
    response = request.urlopen("https://www.screener.in/company/"+symbol+"/consolidated/")
    page_source = response.read().decode('utf-8')
    soup=BeautifulSoup(page_source,'html.parser')
    id=soup.get_text('data-warehouse-id')
    print(id)

【问题讨论】:

    标签: web-scraping beautifulsoup


    【解决方案1】:

    如果 data-warehouse-id 的值就是你想要的,只需获取源代码 HTML 并将其正则表达式。

    例如:

    import re
    
    import requests
    
    data_id = (
        re.search(
            r'data-warehouse-id="(d+)"',
            requests.get("https://www.screener.in/company/ITC/consolidated/").text,
        ).group(1)
    )
    print(data_id)
    

    输出:

    6596626
    

    【讨论】:

    • 太感谢了
    • @rahuldhiman 切勿在HTML 源中使用regexBS4 选择器基于regex 的低 API 级别,因此如果您通过 timeit 比较操作,那么您会注意到直接使用 bs4 比正则表达式更快。
    【解决方案2】:
    from bs4 import BeautifulSoup
    import requests
    
    
    def main(url):
        r = requests.get(url)
        soup = BeautifulSoup(r.text, 'lxml')
        print(soup.select_one('#company-info')['data-warehouse-id'])
    
    
    main('https://www.screener.in/company/ITC/consolidated/')
    

    输出:

    6596626
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      相关资源
      最近更新 更多