2017-08-30 60 views
0
import requests 
x=requests.get("http://www.ip-score.com/") 
import bs4 
soup=bs4.BeautifulSoup(x.text,"lxml") 
x=soup.find("span",{"id":"spamhouse"}) 
print(x.getText()) 

但它只是显示“” 即空字符串美丽的温馨汤元不返回文本

但它应显示“清除”或“低风险”

+1

在页面源代码中,我看到:',所以正常情况下会得到一个空字符串。你想捕捉哪一页的部分? – Stergios

+0

根据您对@Stergios的回复,您可能需要使用其他软件产品(如硒)来刮取您想要的东西。 –

回答

2

在span标签的内容加载通过xhr请求ajax api:/ajax_handler/check_bl/all(通过检查浏览器中的网络流量发现)。
你可以从api获得json响应,但首先你必须从页面抓取你的ip。

import requests 
import bs4 

r = requests.get("http://www.ip-score.com") 
ip = bs4.BeautifulSoup(r.text, "lxml").select_one("div#MaxMind a").string 
r = requests.post('http://www.ip-score.com/ajax_handler/check_bl/all', data={'ip':ip}) 
data = r.json()['spamhouse'] 
print(data) 

或者,您可以使用selenium作为js生成的内容。

+0

哇。你是如何找到ajax api和它接受的数据的? – Stergios

+1

@Stergios在浏览器中打开该页面,使用检查,转到网络选项卡并按xhr筛选。您会注意到api的POST请求。如果你点击它,你会看到标题中的发布数据(或Firefox的参数)选项卡。 –