- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从第三个表( Jade 米)中提取价格数据(最高价和最低价)。代码返回“None”:
import urllib2
from bs4 import BeautifulSoup
import time
import re
start_urls = 4539
nb_quotes = 10
for urls in range (start_urls, start_urls - nb_quotes, -1):
start_time = time.time()
# construct the URLs strings
url = 'http://markets.iowafarmbureau.com/markets/fixed.php?page=egrains'
# Read the HTML page content
page = urllib2.urlopen(url)
# Create a beautifulsoup object
soup = BeautifulSoup(page)
# Search the table to be parsed in the whole HTML code
tables = soup.findAll('table')
tab = tables[2] # This is the table to be parsed
low_tmp = str(tab.findAll('tr')[0].findAll('td')[1].getText()) #Low price
low = re.sub('[+]', '', low_tmp)
high_tmp = str(tab.findAll('tr')[0].findAll('td')[2].string) # High price
high = re.sub('[+]', '', high_tmp)
stop_time = time.time()
print low, '\t', high, '(%0.1f s)' % (stop_time - start_time)
最佳答案
表中的数据是使用以下 JavaScript 调用在浏览器端填充的:
document.write(getQuoteboardHTML(
splitQuote(quotes, 'ZC*1,ZC*2,ZC*3,ZC*4,ZC*5,ZC*6,ZC*7,ZC*8,ZC*9'.split(/,/)),
'shortmonthonly,high,low,last,change'.split(/,/), { nospacers: true }));
BeautifulSoup
是一个 HTML 解析器 - 它不会执行 javascript。
基本上,您需要一些东西来为您执行该 JavaScript。
一种解决方案是在 selenium
的帮助下使用真正的浏览器:
from selenium import webdriver
url = "http://markets.iowafarmbureau.com/markets/fixed.php?page=egrains"
driver = webdriver.Firefox()
driver.get(url)
table = driver.find_element_by_xpath('//td[contains(div[@class="fixedpage_heading"], "CORN")]/table[@class="homepage_quoteboard"]')
for row in table.find_elements_by_tag_name('tr')[1:]:
month = row.find_element_by_class_name('quotefield_shortmonthonly').text
low = row.find_element_by_class_name('quotefield_low').text
high = row.find_element_by_class_name('quotefield_high').text
print month, low, high
driver.close()
打印:
SEP 329-0 338-0
DEC 335-6 345-4
MAR 348-2 358-0
MAY 356-6 366-0
JUL 364-0 373-4
SEP 372-0 379-4
DEC 382-0 390-2
MAR 392-4 399-0
MAY 400-0 405-0
<小时/>
另一个选择是“深入了解”,看看 splitQuote()
和 getQuoteboardHTML()
js 函数实际上做了什么。使用浏览器开发者工具,您可以看到有一个底层请求前往 this url ,它返回一段 javascript 代码,其中包含带有页面上表格数据的所有对象:
var quotes = { 'ZC*1': { name: 'Corn', flag: 's', price_2_close: '338.75', open_interest: '2701', tradetime: '20140911133000', symbol: 'ZCU14', open: '338', high: '338', low: '329', last: '331.75', change: '-7', pctchange: '-2.07', volume: '1623', exchange: 'CBOT', type: '2', unitcode: '-1', date: '14104 ... ', month: 'May 2015', shortmonth: 'May 2015' } };
如果您设法从中提取必要的部分 - 这将是您的第二个选择。
关于python - BeautifulSoup 抓取 td 和 tr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25794935/
我正在用一个 TD 和一个 colspan 属性替换多个 TD。 然而,这呈现完全不同。 我不明白为什么 不同于 我的问题是前 2 个 TD 的宽度之和与 colspanned TD 的宽度不同。
我想这是个愚蠢的问题,但我是 json 的新手,所以任何答案都会有所帮助。 我有 json 文件: `{"aaData": [ [1, "70.1700", "2008-12-29 11:23:00"
我有一个类似 html 的网页格式如下: .... . . . alo foo bla bla 现在,我只知道值 bla bla , 根据该值我们可以跟踪或找到 3rd
我有以下 html 代码: Add New Item test test test test test test test te
Name1 Position1 Operation1 Name2 Position2
如果其中的数据与同一行上第三列 td 内的数据匹配,我需要做的是向第一列 td 添加一个类。 http://jsfiddle.net/rUssu/ html 表格 firstsecondthi
有什么方法可以清除或隐藏第一个 td 的内容,从双列表中的第二个 td,而无需对实际 td 的任何编辑权限? 所以我想隐藏下表中的数字 1. Content
当第一个高度大于第二个 , 包含第二个文本 与中心对齐。我想要第二个 的文本或元素当第一个 对齐到左上角的高度大于秒。 我如何使用 css 来做到这一点? ? HTML5, CSS3 an
我这里遇到了一些麻烦。我正在开发一个按钮,一旦选择该按钮将运行 JavaScript 函数 - ShowColumn() - 这将使表格列出现。表格列首先将被隐藏 - “display:none;”
我需要将第一个 td 设为 100% 宽(包括图像)并将其他 td 放在第一个 td 下方。如何在不更改 HTML 的情况下执行此操作? 这是我的: #katalogas { float:left;
用于创建规则列表的Java类 public class CompArray { public ArrayList a1= new ArrayList(); public CompArray (){
我想在悬停在特定 td 上时更改特定 td 之前所有 td 的背景颜色。 因此,当我将鼠标悬停在该图标上时,该特定行中它之前的所有图标和文本都会更改它们的背景。 任何人都可以建议如何实现它。 这是我的
我今天花了一些时间查看使用 JQuery 遍历表及其行的示例,经过大量试验后我能够做到这一点。但是我在尝试从 td 元素获取值时遇到问题,因此我可以更改为另一个 td 元素的颜色。我有一个绑定(bin
这个问题在这里已经有了答案: Is there a "previous sibling" selector? (32 个答案) 关闭 7 年前。 我正在构建一个与此类似的表: td
当我想设置 td 的宽度时,我将 td 设置为如下宽度: ... 我已经看到通过添加一个空的 div 来设置 td 宽度: some text .h-间隔符{ 高度:0; 宽度:0; 溢
我有以下 HTML 表格: Products Pack Of Quantity Volume Unit Reb
我需要提升文本,但如果我将类应用于 IE、Opera 和 Chrome 中的 TD 或 TR,则所有单元格都会提升(背景和边框以及单元格中的文本)。请看例子: Untitled D
我试图在所有 之间放置边距除了 的 margin-top在第一行, 的底部边距在最后一行。那可能吗?谢谢。 table { border: 1px solid black; width: 98%;
我需要发布我的 td 标签的这些值,因为这是一个使用 jquery 的可编辑表。我不确定这里的问题是脚本还是 td 标签?目前我的 var_dump($_POST) 没有返回任何值。 参见下面的代码,
我想检查当前网格单元格是否是行中最后一个可见单元格。 //accurately confirms if cell is the last cell in the row, assuming there
我是一名优秀的程序员,十分优秀!