我是网络抓狂的新手,并且一直在使用BeautifulSoup来提高每日抵押贷款利率。但是,我试图抓取的许多服务器站点返回“无”或空列表。我试图刮的标签肯定存在,我只是不明白为什么会发生这种情况。一个例子如下。
html=urlopen('https://www.popular.com/en/mortgages/')
bs0bj=BeautifulSoup(html, 'html.parser');
rate=bs0bj.find('span', {'class':'text-md text-popular-medium-blue'}).div
print(rate)
答案 0 :(得分:4)
如果您检查网页来源(例如通过Chrome或Firefox中的view-source:
,或将html
字符串写入文件),您会看到您要查找的元素不在这里。实际上,费率是动态加载的:
<td>
<span class="text-md text-popular-medium-blue">
<script type="text/javascript" src = "https://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&textcolor=3784D2&backgroundcolor=ffffff&t=1"></script>
</span>
</td>
您可以按照脚本网址进行操作,然后您会看到响应类似于以下内容:
document.write('<div>2.75%</div>')
这个响应可能足够常规,可以在其上使用正则表达式。
答案 1 :(得分:3)
正如rubik所说,使用JS动态加载费率。幸运的是,内容的结构相对简单,以下是我的分析方法:
在Chrome(或其他浏览器)中打开新标签页并右键单击,然后选择view-source
。切换到Network
标签,然后选中preserve log
选项。
现在,打开网站https://www.popular.com/en/mortgages/
。加载的内容可以在左侧面板中看到。
检查每个项目并分析其Preview
内容,直至找到要废弃的内容。以下是我发现的内容,2.75%
与网站上显示的抵押贷款利率值相符。
现在,切换到Headers
标签并检查Request URL
,这是发送到服务器的最终请求。
下一步是分析请求网址https://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&textcolor=3784D2&backgroundcolor=ffffff&t=1
我猜测textcolor
和backgroundcolor
表示css信息,所以我删除了它们,发现网址仍然有效。
现在我们有一个更简单的网址:https://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&t=1
很明显,id_rates
表示抵押贷款利率的顺序,没有任何分析。问题是:t
是什么意思?
可以通过分析其他预览内容来查找规则。在这里,我想跳过这个过程,然后给出结论。
t=1
表示Annual interest
,t=2
表示APR
,t=6
表示P&I Payment
等:
完成这些操作后,现在您可以直接从请求网址中删除内容:
from urllib2 import urlopen
import re
file=urlopen('https://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&t=1')
annual_interest = re.findall(r"\d+\.\d+", str(file.read()))[0]
#the annual interest is 2.75
答案 2 :(得分:2)
要获得您以后的数据,可以将selenium与python结合使用,如下所示:
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.popular.com/en/mortgages/')
soup = BeautifulSoup(driver.page_source,"lxml")
item = soup.select('.table-responsive')[0].select("span div")[0].text
print(item)
driver.quit()
结果:
2.75%
答案 3 :(得分:0)
使用 pip install html5lib 但我认为使用“pip install bs4(beautifulSoup)一切都应该自动安装添加 beautifulsooup 和 html5lib html5lib 就像解析器,它与 HTML.parser 相同。两者都是解析器以获得更多信息,这里是 beautifulsoup 文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser