Обзор моего проекта:
Я пытаюсь создать простой скрипт на python 2.6, который будет получать данные о времени трафика из Bing Maps. Пакет модулей библиотеки Scrapy (scrapy.org/) - это то, что я использую для сканирования каждого веб-сайта и извлечения данных из карт Bing.
На картинке выше показано, что я хочу. (выделенная часть данных на данный момент, но, в конечном счете, также потребуется время, указанное ниже.)
Сначала я сделал тест, чтобы увидеть, пойдет ли стартовый URL. и затем использовал выходной журнал, чтобы напечатать вывод URL, если он успешно прошел. Как только это сработало, моим следующим шагом была попытка извлечь нужные мне данные с веб-страницы.
Я использовал дополнения Firebug, XPather и XPath Firefox, чтобы найти путь к html-данным, которые я хочу извлечь. Эта ссылка очень помогла мне правильно кодировать путь (doc.scrapy.org/topics/selectors.html). Глядя на firebug, это то, что я хочу извлечь ...
<span class="time">22 min</span>
и XPather показывает это как путь для этого конкретного элемента. ...
/div[@id='TaskHost_DrivingDirectionsSummaryContainer']/div[1]/span[3]
Когда я запускаю программу в cmd с указанным выше путем, извлеченные данные распечатываются как [], и когда я добавляю / class = 'time' в конец диапазона, распечатка данных будет [u'False ' ]. Посмотрев немного ближе в DOM-окне firebug, я заметил, что class = "time" имеет значение false для get 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)