You can extract a regular expression from the text:
data = soup.find("ul", {"class": "posts"})
import re
r = re.compile("\d+\.\d+\.\d+\.\d+")
print(r.findall(data.text))
['116.10.191.162', '116.10.191.204', '61.174.51.232', '61.174.51.224', '116.10.191.225', '200.162.47.130', '116.10.191.175', '61.174.51.223', '61.174.51.234', '61.174.51.209', '116.10.191.165', '106.240.247.220']
Or as the patterns repeat, you can split into substrings with dividing lines and split once from the end of each substring to extract ip:
data = soup.find("ul", {"class": "posts"})
ips = [line.rsplit(None, 1)[1] for line in data.text.splitlines() if line]
print(ips)
['116.10.191.162', '116.10.191.204', '61.174.51.232', '61.174.51.224', '116.10.191.225', '200.162.47.130', '116.10.191.175', '61.174.51.223', '61.174.51.234', '61.174.51.209', '116.10.191.165', '106.240.247.220']
There is only one class on the page posts, so it’s enough to find when you iterate over find_all, you actually iterate over one list of elements.