我正在尝试从此网站获取信息:
http://www.gocrimson.com/sports/mbkb/2011-12/roster
如果你在浏览器中查看该页面,你会看到一个包含所有玩家信息的好<table>
,其下方有教练的信息。
当我将该页面拉入python程序(使用urllib2
)或ruby程序(使用nokogiri
)时,该表被表示为一堆div
元素。我以为可能有一些javascript正在运行,所以我在浏览器上禁用了javascript并重新访问了该页面。它仍然会加载table
。
如果我使用Selenium
来提取页面来源,我会获得table
格式。
有关为什么页面会出现div的想法吗?
的Python:
page = urllib2.urlopen(url)
html = page.read()
print html
输出(我将div
中的一个放在最后一行以引起对它的注意。这是浏览器页面中的tr
。缩短为保持在字符限制之下):
'\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\r\n\r\n\r\n\r\n\r\n\t\t\t\t\r\n\r\n\r\n<?xml version="1.0" encoding="iso-8859-1"?>\r\n<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">\r\n<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1"/> <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0"/>\r\n<meta forua="true" http-equiv="Cache-Control" content="must-revalidate" />\r\n<meta http-equiv="Pragma" content="no-cache, must-revalidate" />\r\n
<title>The Official Website of Harvard University Athletics: Harvard Athletics - GoCrimson.com : Men\'s Basketball - 2011-12 Roster </title>\r\n<link rel="stylesheet" href="/info/mobile/mobile.css" type="text/css"></link>\r\n<link rel="stylesheet" href="/mobile-overwrite.css" type="text/css"></link>\r\n</head>\r\n
<body class="classic">\r\n\r\n\r\n\t<strong><a href="/landing/index">News</a></strong>\r\n | \r\n\t<a href="/landing/index?c=scores">Scores</a>\r\n<br /><br />\r\n\r\n<p class="goBack-link"><a href="javascript:history.go(-1)"><<< Back</a></p>\r\n\r\n\r\n<div class="roster ">\r\n\t\t\t<div class="title">Men\'s Basketball - 2011-12 Roster</div>\r\n\t\t<div class="table">\r\n\t\t<div class="titles">\r\n\t\t\t
<div class="number">No.</div>\r\n\t\t\t<div class="name">Name</div>\r\n\t\t\t<div class="positions">Position</div>\r\n\t\t</div>\r\n\t\t\r\n\t\t\t\t\t<div class="item even clearfix">\r\n\t\t\t\t<div class="data">\r\n\t\t\t\t\t<div class="number">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t3\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class="name">
红宝石:
doc = Nokogiri::HTML(open("http://www.google.com/search?q=doughnuts"))
doc.css('tr').each do |node|
puts node.text
end
找不到tr
,但
doc.css('div').each do |node|
puts node.text
end
找到div
s
答案 0 :(得分:1)
通过添加User-Agent标头,我可以获得<table>
而不是div
。具体来说,我假装是一个众所周知的流行浏览器。
opener = urllib2.build_opener()
opener.addheaders = [('User-agent',
('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) '
'AppleWebKit/535.1 (KHTML, like Gecko) '
'Chrome/13.0.782.13 Safari/535.1'))
]
response = opener.open('http://www.gocrimson.com/sports/mbkb/2011-12/roster')
print response.readlines() # divs are now a table