使用样式属性 Ruby 使用 Nokogiri 抓取 table 数据
Scraping table data with Nokogiri using style attribute Ruby
我想抓取此网页中 td
的文本值,例如:0.2197 British Pound
<table border=1 cellpadding=5 cellspacing=0 style="font-weight: normal; font-size: 10.5;"><tr><td width=50>1791</td><td>0.2195 British Pound</td></tr><tr><td width=50>1792</td><td>0.2239 British Pound</td></tr><tr><td width=50>1793</td><td>0.2218 British Pound</td></tr><tr><td width=50>1794</td><td>0.2106 British Pound</td></tr><tr><td width=50>1795</td><td>0.2209 British Pound</td></tr><tr><td width=50>1796</td><td>0.2333 British Pound</td></tr><tr><td width=50>1797</td><td>0.2254 British Pound</td></tr><tr><td width=50>1798</td><td>0.2279 British Pound</td></tr><tr><td width=50>1799</td><td>0.2420 British Pound</td></tr><tr><td width=50>1800</td><td>0.2199 British Pound</td></tr><tr><td width=50>1801</td><td>0.2283 British Pound</td></tr><tr><td width=50>1802</td><td>0.2230 British Pound</td></tr><tr><td width=50>1803</td><td>0.2202 British Pound</td></tr><tr><td width=50>1804</td><td>0.2197 British Pound</td></tr><tr><td width=50>1805</td><td>0.2300 British Pound</td></tr>
但是,我正在抓取的网页有几个 table,所以我需要一种方法来指定这个特定的 table。
这是我试过的:
exchange_rate_table = Nokogiri::HTML(open('http://measuringworth.com/datasets/exchangeglobal/result.php?year_source=1791&year_result=2007&countryE%5B%5D=United+Kingdom'))
exchange_rate_table.css('td')
但是 returns 所有 td
,有些甚至在 table 之外。
在您的解决方案中,您找到了所有 <td>
个元素:
在这里,您打开了整个网页:
exchange_rate_table = Nokogiri::HTML(open('http://measuringworth.com/datasets/exchangeglobal/result.php?year_source=1791&year_result=2007&countryE%5B%5D=United+Kingdom'))
在这里,您找到了网页中的所有 <td>
个元素(如果这是您想要的):
exchange_rate_table.css('td')
网页中有两个 table,您要排除其中一个。在此特定页面中,您只有两个 <table>
元素。
您应该找到一个 table,然后是它的 <td>
个元素,而不是找到所有 <td>
个元素。
查找网页:
web_page = Nokogiri::HTML(open('http://measuringworth.com/datasets/exchangeglobal/result.php?year_source=1791&year_result=2007&countryE%5B%5D=United+Kingdom'))
找到第二个 table(有汇率的那个):
exchange_rate_table = web_page.css('table').last
找到 table table 中的所有 <td>
个元素:
exchange_rate_cells = exchange_rate_table.css('td')
我想抓取此网页中 td
的文本值,例如:0.2197 British Pound
<table border=1 cellpadding=5 cellspacing=0 style="font-weight: normal; font-size: 10.5;"><tr><td width=50>1791</td><td>0.2195 British Pound</td></tr><tr><td width=50>1792</td><td>0.2239 British Pound</td></tr><tr><td width=50>1793</td><td>0.2218 British Pound</td></tr><tr><td width=50>1794</td><td>0.2106 British Pound</td></tr><tr><td width=50>1795</td><td>0.2209 British Pound</td></tr><tr><td width=50>1796</td><td>0.2333 British Pound</td></tr><tr><td width=50>1797</td><td>0.2254 British Pound</td></tr><tr><td width=50>1798</td><td>0.2279 British Pound</td></tr><tr><td width=50>1799</td><td>0.2420 British Pound</td></tr><tr><td width=50>1800</td><td>0.2199 British Pound</td></tr><tr><td width=50>1801</td><td>0.2283 British Pound</td></tr><tr><td width=50>1802</td><td>0.2230 British Pound</td></tr><tr><td width=50>1803</td><td>0.2202 British Pound</td></tr><tr><td width=50>1804</td><td>0.2197 British Pound</td></tr><tr><td width=50>1805</td><td>0.2300 British Pound</td></tr>
但是,我正在抓取的网页有几个 table,所以我需要一种方法来指定这个特定的 table。
这是我试过的:
exchange_rate_table = Nokogiri::HTML(open('http://measuringworth.com/datasets/exchangeglobal/result.php?year_source=1791&year_result=2007&countryE%5B%5D=United+Kingdom'))
exchange_rate_table.css('td')
但是 returns 所有 td
,有些甚至在 table 之外。
在您的解决方案中,您找到了所有 <td>
个元素:
在这里,您打开了整个网页:
exchange_rate_table = Nokogiri::HTML(open('http://measuringworth.com/datasets/exchangeglobal/result.php?year_source=1791&year_result=2007&countryE%5B%5D=United+Kingdom'))
在这里,您找到了网页中的所有 <td>
个元素(如果这是您想要的):
exchange_rate_table.css('td')
网页中有两个 table,您要排除其中一个。在此特定页面中,您只有两个 <table>
元素。
您应该找到一个 table,然后是它的 <td>
个元素,而不是找到所有 <td>
个元素。
查找网页:
web_page = Nokogiri::HTML(open('http://measuringworth.com/datasets/exchangeglobal/result.php?year_source=1791&year_result=2007&countryE%5B%5D=United+Kingdom'))
找到第二个 table(有汇率的那个):
exchange_rate_table = web_page.css('table').last
找到 table table 中的所有 <td>
个元素:
exchange_rate_cells = exchange_rate_table.css('td')