【问题标题】:Scrape webpage for a specific text(string)抓取特定文本的网页(字符串)
【发布时间】:2020-06-06 00:08:23
【问题描述】:

第一次在 stackoverflow 上发帖,如果我发帖不正确,我深表歉意。我试图仅在存在特定文本字符串时才抓取网页以获取信息。我只使用了漂亮的汤,但找不到包含我正在寻找的文本的元素。经过更多的研究,我尝试使用 selenium,但了解到在美丽的汤中找不到一些动态加载的元素。到目前为止,我仍然无法找到文本字符串。当我检查元素时,文本是可定位的。

TLDR:鉴于我可以找到“公开发行价格”文本,我想从该网页上获取每股价格。使用 beautifulsoup 或 selenium 时找不到字符串,但我可以使用检查元素定位 (https://docoh.com/filing/829323/0001654954-20-006336/INUV-424B5)

【问题讨论】:

标签: python


【解决方案1】:

我建议您使用 python 和 httplib,这将避免您需要调用的机制太远,并且您不需要更多。

import httplib
connection = httplib.HTTP(S)Connection("ip/hostname", port)
req = connection.request("GET", "url")
if(req.read() == "text you are looking for")
    print("found")

显然您选择 HTTP 或 HTTPS 连接,并将 ip/hostname 和 url 替换为所需的地址和 url。

注意:您始终可以在 oneliner 中使用 python 帮助模块,例如:
python -c 'import httplib; help(httplib)'

【讨论】:

    【解决方案2】:

    我自己是beautifulsoup 的新手,但我能够获得所需的输出...我将尝试向您展示从识别问题到找到解决方案的整个过程。

    当我检查元素时,我得到了这个:

    但是当我查看以下代码创建的汤时,却找不到这些类:

    #code
    import requests
    from bs4 import BeautifulSoup as bs
    
    page = requests.get('https://docoh.com/filing/829323/0001654954-20-006336/INUV-424B5')
    soup = bs(page.content,'html.parser')
    print(soup)
    

    我能找到的最远的类是filing-frame,我注意到它是一个 iframe。所以我查找了如何使用beautifulsoup 从 iframe 中获取数据。我发现了这个SO post。第一个答案就是所有需要的。

    现在我没有太多使用urllib,所以我坚持使用requests。最终这就是我想出的:

    for iframe in soup("iframe"):
        i_frame= requests.get("https://docoh.com"+iframe.attrs['src'])
        iframe_soup = bs(i_frame.content)
    

    现在,如果我在 iframe_soup 中搜索类 agm,我会得到想要的结果...

    print(iframe_soup.find_all("td", {"class": "agm"})[1].text)
    #output : '5,500,0000'
    

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 2018-02-04
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多