首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python web-scraping在抓取表内容时不返回任何内容/null

Python web-scraping在抓取表内容时不返回任何内容/null
EN

Stack Overflow用户
提问于 2019-08-07 03:32:06
回答 2查看 131关注 0票数 0

我是Python的新手,现在我正在尝试从蒙特利尔银行网站(https://www.bmo.com/home/personal/banking/rates/foreign-exchange)上获取货币买卖汇率,然而,当我尝试获取时,我什么也得不到。

我通过一个示例学习,并在下面使用Visual Studio 2019编写了一个非常示例的示例。我可以打印来自这些网站的段落文本,但是当我将xpath更改为表格单元格元素路径时,它什么也不返回。

用于抓取段落文本和工作:

代码语言:javascript
运行
复制
import requests

from lxml.html import etree

url = 'https://www.bmo.com/home/personal/banking/rates/foreign-exchange'

r=requests.get(url).text

s=etree.HTML(r)

file = s.xpath('//*[@id="main_content"]/p[2]/text()')

print(file)

它工作良好,输出:提供的费率...页面底部也是如此。

当将文本改回‘//*@id=“ratesTable”/tbody/tr2/td3/ s.xpath ()’时(我正在尝试以美元计算卖价),它返回一个'[]‘,其中没有任何内容。我调试了'file‘元素,它里面什么都没有,长度也是0。

我是不是做错了什么?我相信xpath和url是正确的。我希望我能在单元格中得到十进制数1.2931 (卖出率)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-07 03:42:35

您在页面上看到的数据是通过Javascript从不同URL动态加载的。使用re和'ast‘模块,您可以检索以下信息:

代码语言:javascript
运行
复制
import re
import requests
from ast import literal_eval

data_url = 'https://www.bmo.com/bmocda/templates/json_fx_include.jsp'

data = literal_eval( re.findall(r'FX = (\{.*?\});',  requests.get(data_url).text, flags=re.DOTALL)[0] )

from pprint import pprint
pprint(data)

print(data['USD']['NA']['BUY'])

打印:

代码语言:javascript
运行
复制
{'EUR': {'NA': {'BUY': '1.4069', 'SELL': '1.5288'},
         'OA': {'BUY': '1.4472', 'SELL': '1.5137'},
         'OB': {'BUY': '1.4523', 'SELL': '1.5092'},
         'OC': {'BUY': '1.456', 'SELL': '1.5055'},
         'OD': {'BUY': '1.4634', 'SELL': '1.4982'}},
 'USD': {'NA': {'BUY': '1.2931', 'SELL': '1.3589'},
         'OA': {'BUY': '1.2958', 'SELL': '1.3562'},
         'OB': {'BUY': '1.3027', 'SELL': '1.3493'},
         'OC': {'BUY': '1.3061', 'SELL': '1.3459'},
         'OD': {'BUY': '1.3075', 'SELL': '1.3445'}}}
1.2931
票数 1
EN

Stack Overflow用户

发布于 2019-08-07 03:44:43

目前许多网站都是通过javascript动态加载内容或修改文档对象模型。这样的网站仍然可以被抓取,但你必须深入研究javascript片段。

在这种情况下,表是通过javascript调用加载的,您可以通过在浏览器中禁用javascript来进行验证。如果您的浏览器支持,请打开web开发人员工具并检查网络页面,该页面将显示为生成此页面而加载的所有资源。在这些资源中,你会发现一些有趣的javascript片段,比如json_fx_include.js,它似乎保存了你正在寻找的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57382835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档