gpt4 book ai didi

python - BeautifulSoup 无法从表中抓取值

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:52 25 4
gpt4 key购买 nike

我刮this Taiwanese stock website在 Python 上使用 beautifulsoup。我可以在 Chrome 中看到如下的 html 代码,但是如何获取 <td> 内的文本?

<td id="2412_b4" align="center" style="color: rgb(16, 80, 16);">97.40</td>

当我使用Python来获取里面的文本时我得到的结果是这样的:

<td align="center" id="2412_b4">-</td>

我的代码是:

# -*- coding: utf-8 -*-
import urllib2, sys
#from BeautifulSoup import beautifulsoup
from bs4 import BeautifulSoup
from HTMLParser import HTMLParser
import requests
#from lxml import html


site= "http://mis.twse.com.tw/stock/fibest.jsp?stock=2412"
hdr = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36',
'Accept-Language':'zh_tw',
'Cookie':'JSESSIONID=761ED2DA50CCC87E053877524B1827D7',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cache-Control':'max-age=0',
'Accept-Encoding':'gzip, deflate, sdch'
}

req = requests.get(site, headers = hdr, verify = False)

#page = urllib2.urlopen(req)

soup = BeautifulSoup(req.text,"html.parser")


T = soup.findAll('tbody', {'id':'hor-minimalist-tb'})
for name in T:
print name.text

请告诉我如何获取

中的文本<小时/>

更新:我尝试了@Anand S Kumar 给我的教程。我编辑的代码是:

import sys  
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
from lxml import html

#Take this class for granted.Just use result of rendering.
class Render(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()

def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit()


url = "http://mis.twse.com.tw/stock/fibest.jsp?stock=2412"
#url = 'http://pycoders.com/archive/'
r = Render(url)
result = r.frame.toHtml()
#QString should be converted to string before processed by lxml
formatted_result = str(result.toAscii())

#Next build lxml tree from formatted_result
tree = html.fromstring(formatted_result)

#Now using correct Xpath we are fetching URL of archives
archive_links = tree.xpath('//tbody[@id="hor-minimalist-tb"]/tr/td/text()')
print archive_links

它对我来说仍然不起作用。里面的值依然是:

最佳答案

就像在其他答案中已经说过的那样,页面中的实际数据是 javascript 渲染/ajax 渲染的。

如果您在 chrome 中对页面使用查看页面源代码,您将看到您正在检查的组件的原始 html 源代码 -

    <tbody id="hor-minimalist-tb">
<tr>
<td align="center" style="color:#000000">-</td>
<td align="center">-</td>
<td id="2412_a4" align="center">-</td>
<td id="2412_f4" align="center" style="color:#000000">-</td>
</tr>
<tr>
<td align="center" style="color:#000000">-</td>
<td align="center">-</td>
<td id="2412_a3" align="center">-</td>
<td id="2412_f3" align="center" style="color:#000000">-</td>
</tr>
<tr>
<td align="center" style="color:#000000">-</td>
<td align="center">-</td>
<td id="2412_a2" align="center">-</td>
<td id="2412_f2" align="center" style="color:#000000">-</td>
</tr>
.
.
</tbody>

当你这样做时 -

 req = requests.get(site, headers = hdr, verify = False)

req.text 包含页面的原始 html 源,而不是 javascript 渲染的 DOM 。这就是为什么您从 BeautifulSoup 获得结果的原因。

对于 javascript 渲染的页面,您可以按照教程 - https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/ (那里的代码是针对 lxml 的,但可以轻松地适用于 BeautifulSoup)。它使用 QT Web Kit 库。 (免责声明:这不是我的教程/内容)

关于python - BeautifulSoup 无法从表中抓取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com