我的项目概述:
我正在尝试在python 2.6中创建一个简单的脚本,它将从Bing Maps获取流量时间数据。我正在使用Scrapy库模块包(scrapy.org/)来浏览每个网站并从Bing地图中提取数据。
上图显示了我想要的内容。 (现在突出显示的数据部分,但最终也需要下面的时间。)
我首先做了一个测试,看看启动网址是否会消失。然后使用输出日志打印url的输出,如果它成功通过。一旦工作,我的下一步是尝试从网页中提取我需要的数据。
我一直在使用Firebug,XPather和XPath Firefox附加组件来查找我想要提取的数据的html路径。这个链接非常有助于指导我正确编码路径(doc.scrapy.org/topics/selectors.html)。从看着萤火虫,这就是我想要提取的......
<span class="time">22 min</span>
和XPather将此作为此特定项目的路径显示。 ......
/div[@id='TaskHost_DrivingDirectionsSummaryContainer']/div[1]/span[3]
当我使用上面给定的路径在cmd中运行程序时,提取的数据打印为[],当我将/ class ='time'添加到span的末尾时,数据打印输出为[u'False' ]。当我在firebug的DOM窗口中看得更近时,我注意到get =“time”对于获取isID是错误的,而childNode持有我需要的数据。如何从childNode中提取数据?
以下是我目前的代码
from scrapy import log # This module is useful for printing out debug information
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector, XPathSelectorList, XmlXPathSelector
import html5lib
class BingSpider(BaseSpider):
name = 'bing.com/maps'
allowed_domains = ["bing.com/maps"]
start_urls = [
"http://www.bing.com/maps/?FORM=Z9LH4#Y3A9NDAuNjM2MDAxNTg1OTk5OTh+LTc0LjkxMTAwMzExMiZsdmw9OCZzdHk9ciZydHA9cG9zLjQwLjcxNDU0OF8tNzQuMDA3MTI1X05ldyUyMFlvcmslMkMlMjBOWV9fX2VffnBvcy40MC43MzE5N18tNzQuMTc0MTg1MDAwMDAwMDRfTmV3YXJrJTJDJTIwTkpfX19lXyZtb2RlPUQmcnRvcD0wfjB+MH4="
]
def parse(self, response):
self.log('A response from %s just arrived!' % response.url)
x = HtmlXPathSelector(response)
time=x.select("//div[@id='TaskHost_DrivingDirectionsSummaryContainer']/div[1]/span[3]").extract()
print time
CMD输出
2011-09-05 17:43:01-0400 [scrapy] DEBUG: Enabled item pipelines:
2011-09-05 17:43:01-0400 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:602
3
2011-09-05 17:43:01-0400 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080
2011-09-05 17:43:01-0400 [bing.com] INFO: Spider opened
2011-09-05 17:43:02-0400 [bing.com] DEBUG: Crawled (200) <GET http://www.bing.co
m/maps/#Y3A9NDAuNzIzMjYwOTYzMTUwMDl+LTc0LjA5MDY1NSZsdmw9MTImc3R5PXImcnRwPXBvcy40
MC43MzE5N18tNzQuMTc0MTg1X05ld2FyayUyQyUyME5KX19fZV9+cG9zLjQwLjcxNDU0OF8tNzQuMDA3
MTI0OTk5OTk5OTdfTmV3JTIwWW9yayUyQyUyME5ZX19fZV8mbW9kZT1EJnJ0b3A9MH4wfjB+> (refer
er: None)
2011-09-05 17:43:02-0400 [bing.com] DEBUG: A response from http://www.bing.com/m
aps/ just arrived!
[]
2011-09-05 17:43:02-0400 [bing.com] INFO: Closing spider (finished)
2011-09-05 17:43:02-0400 [bing.com] INFO: Spider closed (finished)
答案 0 :(得分:0)
对于所有报废用途,请使用BeautifulSoup
soup.find('span', class="time")
答案 1 :(得分:0)
当网站以重要方式使用JavaScript时,您将无法信任在运行时获得的XPath,因为这是在运行JavaScript代码后获得的XPath,而Scrapy无法运行JavaScript代码。
您应该:
打开Web浏览器开发人员工具的“网络”标签。
在网站上的“网络”标签上观看网站执行的相应请求的同时,执行获取所需数据的步骤。
尝试使用Scrapy重现这些步骤(请求)。
另请参阅Debugging Spiders。