【问题标题】:Can I scrape or extract data inside app.run我可以在 app.run 中抓取或提取数据吗
【发布时间】:2019-08-02 12:31:07
【问题描述】:

我正在使用 python 和 beautifulsoup,我需要在app.run({"data":Id":"124330049","stock":83}) 下提取一些数据。当我试图找到这些值时,它使用 find 返回一个空列表。

我可以在 app.run 中提取/抓取数据吗?

代码:

 soup = content.find('script').get_text()
      found_data = json.loads(soup)
      print(found_data) 

// 这给了我错误:需要输出库存:83

【问题讨论】:

  • 你能更详细地发布代码和所需的输出吗??
  • 我应该得到价值为 83 的股票价值作为输出 - 需要获得股票:83
  • 您可以编辑您的问题并发布您的代码吗?
  • 你试过的代码在哪里?
  • 更好地使用正则表达式

标签: python json web-scraping beautifulsoup screen-scraping


【解决方案1】:

您可以选择所有带有特定子字符串的脚本标签,然后正则表达式输出您想要的内容

import re
from bs4 import BeautifulSoup as bs

html = '''
<script type="text/javascript">app.run({"data":Id":"124330049","stock":83})</script>
'''
soup = bs(html, 'lxml')
scripts = [script.text for script in soup.select('script') if 'app.run({"data":Id"' in script.text]

r = re.compile(r'"stock":(\d+)}')
for script in scripts:
    print(r.findall(script))

【讨论】:

  • 你似乎是一个正则表达式的粉丝,但为什么不直接使用(虽然有些令人费解)print(scripts[0].split(',')[1].split('}')
  • @JackFleeting 我不喜欢网络抓取中的正则表达式,原因有两个。我不擅长正则表达式,我不喜欢正则表达式与 html 混合,尽管我们在这里处理的是一个字符串。因为我是 python 新手,所以在其中练习正则表达式和正则表达式与 python。完全同意你的方法。
  • 我一直在关注(并使用!)你的答案一段时间,所以我很难相信你是任何事情的新手......干得好!
  • 我已经通过像 @JackFleeting 那样使用拆分来准确提取数据。
猜你喜欢
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多