我正在使用bs4
和urllib2
从网站上获取一些信息。
这里是webpage。
我必须取出电话的其余部分3610...
...但首先我必须按此按钮才能显示电话的其余部分。
此信息位于此div
:
<div class="telefones">
Telefone(s): <span id="telefones">3610...
<span><input type="button" id="verTel" value="ver telefone completo"/></span></span>
</div>
是否可以将bs4
与urllib2
一起使用来实现这一目标?
答案 0 :(得分:3)
电话号码从对http://www.ribeiraosaude.com.br/home/GetTelefone/<id>
网址的响应加载,使用requests
发出此请求并从JSON响应中提取电话号码:
import requests
from bs4 import BeautifulSoup
page_id = 937
with requests.Session() as session: # maintaining web-scraping session
response = session.get("http://www.ribeiraosaude.com.br/detalhe/%d" % page_id)
soup = BeautifulSoup(response.content, "html.parser")
phone_number = session.get("http://www.ribeiraosaude.com.br/home/GetTelefone/%d" % page_id).json()["telefone"]
print(phone_number)
答案 1 :(得分:3)
如何处理此问题取决于单击按钮时发生的情况。
如果按钮触发显示数字的JavaScript,则可以抓取按钮调用的JavaScript。
EG。 function displayNumber(){ document.body.yourSpan.innerHTML = 'NUMBER'
但是,如果按钮导致ajax请求,您可以使用fantastic request library built into python模仿页面的操作,直接与服务器进行交互。
EG。 phone_number = session.get("http://www.ribeiraosaude.com.br/home/GetTelefone/%d" % page_id).json()["telefone"]
(来源:alecxe)
然而,无论按钮如何工作,还有一个选择。如果使用Selenium来处理页面也非常流行,它与可以由python控制的浏览器非常相似。有关使用Selenium单击按钮的信息,请参阅this answer