【问题标题】:How to scrape value from page that loads dynamicaly?如何从动态加载的页面中抓取价值?
【发布时间】:2016-09-03 21:36:14
【问题描述】:
我试图抓取的网站主页显示四个选项卡,其中一个显示“[Number] Available Jobs”。我有兴趣抓取 [Number] 值。当我在 Chrome 中检查页面时,我可以看到包含在 <span> 标记中的值。
但是,当我直接查看页面源代码时,<span> 标记中没有包含任何内容。我计划使用 Python requests 模块发出 HTTP GET 请求,然后使用正则表达式从返回的内容中捕获值。如果内容不包含我需要的数字,这显然是不可能的。
我的问题是:
这里发生了什么?如何将值动态加载到
页面,显示,然后不出现在 HTML 源代码中?
如果页面源中没有出现该值,我该怎么办?
到达那里?
【问题讨论】:
标签:
python
html
httprequest
httpresponse
【解决方案1】:
如果内容没有出现在页面源中,那么它可能是使用 javascript 生成的。例如,站点可能有一个列出作业的 REST API,Javascript 代码可以从 API 请求作业并使用它在 DOM 中创建节点并将其附加到可用作业。这只是一种可能性。
废弃这些信息的一种方法是弄清楚 javascript 是如何工作的,并让你的 python 抓取工具做同样的事情(例如,如果它正在使用一个简单的 REST API,你只需要向它发出请求相同的网址)。通常这并不容易,因此另一种选择是使用支持 javascript 的浏览器(如 selenium)进行抓取。
我要提到的最后一件事是that regular expressions are a fragile way to parse HTML,您通常应该更喜欢使用像 BeautifulSoup 这样的库。
【解决方案2】:
1.一个值可以用ajax动态加载,ajax是异步加载的,这意味着站点的其余部分不会等待ajax被渲染,这就是为什么当你得到DOM时,用ajax加载的元素不会出现在它。
2.对于抓取动态内容,您应该使用 selenium,here a tutorial
【解决方案3】:
- 对于动态加载的数据,您应该在网络中查找 xhr 请求,如果您可以使该数据对您有用,那么瞧!
- 你可以幻化 js,它是一个无头浏览器,它使用动态加载的内容捕获该页面的 html。