【问题标题】:using python urllib and beautiful soup to extract information from html site使用python urllib和beautiful soup从html站点中提取信息
【发布时间】:2015-07-19 17:27:52
【问题描述】:

我正在尝试从该网站提取一些信息,即:

比例(处女座 + GA + Shapley):29 pc/arcsec = 0.029 kpc/arcsec = 1.72 kpc/arcmin = 0.10 Mpc/度

但 : 之后的所有内容都取决于 galtype。

我编写了一个使用 beautifulsoup 和 urllib 并返回一些信息的代码,但我正在努力将数据进一步减少到我想要的信息。如何获得我想要的信息?

galname='M82'
a='http://ned.ipac.caltech.edu/cgi-bin/objsearch?objname='+galname+'&extend'+\
   '=no&hconst=73&omegam=0.27&omegav=0.73&corr_z=1&out_csys=Equatorial&out_equinox=J2000.0&obj'+\
   '_sort=RA+or+Longitude&of=pre_text&zv_breaker=30000.0&list_limit=5&img_stamp=YES'

print a
import urllib
f = urllib.urlopen(a)
from bs4 import BeautifulSoup
soup=BeautifulSoup(f)

soup.find_all(text=re.compile('Virgo')) and soup.find_all(text=re.compile('GA')) and soup.find_all(text=re.compile('Shapley'))

【问题讨论】:

  • 不要使用urllib,这是一个糟糕的API。使用requests,它实际上是标准库,而且是一个漂亮的 API。
  • 你想要的输出是什么?
  • 有一行写着 'D (Virgo + GA + Shapley) :' 我需要这一行(主要是该行的第一个数字)

标签: python beautifulsoup urllib


【解决方案1】:

定义一个正则表达式模式,帮助BeautifulSoup 找到合适的节点,然后使用保存组提取数字:

pattern = re.compile(r"D \(Virgo \+ GA \+ Shapley\)\s+:\s+([0-9\.]+)")
print pattern.search(soup.find(text=pattern)).group(1)

打印5.92。


此外,我通常反对使用正则表达式来解析 HTML,但是,由于这是一个文本搜索,我们不会使用正则表达式来匹配开始或结束标记或与 HTML 提供的结构相关的任何内容 -您可以将您的模式应用到页面的 HTML 源代码,而无需涉及 HTML 解析器:

data = f.read()
pattern = re.compile(r"D \(Virgo \+ GA \+ Shapley\)\s+:\s+([0-9\.]+)")
print pattern.search(data).group(1)

【讨论】:

  • 如果我想搜索不同的文本值,例如错误(稍后是 5 或 6 个字符,我是否会更改 \s+:\s+([0- 9\.]+) ? 我不熟悉这部分代码的作用。
  • @user2201043 我认为您的正则表达式将转换为D \(Virgo \+ GA \+ Shapley\)\s+:\s+([0-9\.]+)\s+\+/\-\s+([0-9\.]+)。然后使用groups() 或group(1) 和group(2) 获取值。
  • 我假设上面所说的 \s+([0-9\.]+) 它正在寻找数字?但我正在尝试使用此代码模式 = re.compile(r"\Classifications \s+:") a=soup.find(text=pattern) print pattern.search(soup.find(text=pattern)).group( 0) 但我需要下一个信息是字母而不是数字,我该怎么做?
  • @user2201043 或者,您也可以使用\d+\.\d+ 来匹配浮点数。
猜你喜欢
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
相关资源
最近更新 更多