【问题标题】:Parsing HTML with BeautifulSoup and no Classes (just paragraphs)用 BeautifulSoup 解析 HTML 并且没有类(只是段落)
【发布时间】:2017-12-17 06:05:36
【问题描述】:

我正在尝试用数字解析 'https://projecteuler.net/problem=8' 的中间位。由于它没有单独的类来选择它,所以我使用了

r = requests.get('https://projecteuler.net/problem=8')
data = r.text
soup = BeautifulSoup(data, "lxml")
[para1, para2, para3] = (soup.find_all('p'))

分隔段落,但这会留下很多额外的垃圾(<p> and <br>)。有没有清除所有这些的命令?有没有比我目前使用的更好的分割命令?从来没有真正用 Python 做过很多网络爬虫...

【问题讨论】:

  • 文档类型为html,您可能希望使用'html.parser' 而不是"lxml"。另外,一旦你有了那张数字表,你理想的输出是什么? (NumPy 数组,还是只想打印块?)

标签: python html beautifulsoup lxml


【解决方案1】:

soup.find_all返回一组包含html标签的html节点;如果你想从节点中提取文本,你可以在每个节点上使用.text;将其应用于para2,给出:

para2.text.split()

#['73167176531330624919225119674426574742355349194934',
# '96983520312774506326239578318016984801869478851843',
# '85861560789112949495459501737958331952853208805511',
# '12540698747158523863050715693290963295227443043557',
# ...

【讨论】:

  • 并返回 1000 位数字:int(''.join(para2.text.split()))
  • @BradSolomon 很好。我认为每一行都是一个单独的数字。 @JordanAustin 如果您想要一个号码,para2.text.replace('\n', '') 也可以。
猜你喜欢
  • 2021-01-18
  • 2016-05-30
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2011-06-12
相关资源
最近更新 更多