2016-04-28 5 views
-1

Я продолжаю получать пустой CSV-файл после запуска моего кода. Я подозреваю, что это могут быть XPaths, но я действительно не знаю, что я делаю. На выходе терминала нет ошибок. Я пытаюсь получить информацию от различных Craigslist pages.Пустой CSV после Scrapy Crawl

from scrapy.spiders import Spider 
from scrapy.selector import Selector 
from craigslist_probe.items import CraigslistSampleItem 

class MySpider(Spider): 
name = "why" 

allowed_domains = ["craigslist.org"] 

f = open("urls.txt") 
start_urls = [url.strip() for url in f.readlines()] 
f.close() 

def parse(self, response): 
    titles = response.selector.xpath("/section[@id='pagecontainer']") 
    items = [] 
    for titles in titles: 
     item = CraigslistSampleItem() 
     item["img"] = titles.xpath("./div[@class='tray']").extract() 
     item["body"] = titles.xpath("./section[@id='postingbody']/text()").extract() 
     item["itemID"] = titles.xpath(".//div[@class='postinginfos']/p[@class='postinginfo']").extract() 
     items.append(item) 
    return items 
+1

Вы проверили, заполнены ли поля товара? используя некоторые 'print' или журналы на них? – eLRuLL

+2

Вы можете попробовать свои xpaths с помощью 'scrapy shell' или с помощью инструмента Firebug для Firefox. Они позволят вам запустить поиск по xpath и увидеть возвращаемые значения. Очень удобно. В примечании к стилю 'для заголовков в заголовках:' не очень, 'для заголовка в заголовках:' было бы лучше. Python, похоже, все равно. – Steve

ответ

0

Я подозреваю, что ваш XPath не соответствует структуре HTML-страницы. Обратите внимание, что одиночная косая черта() сигнализирует прямому ребенку, поэтому, например, /section будет работать только в том случае, если корневой элемент страницы <section> элемент, который вряд ли когда-либо будет. Попробуйте использовать // по умолчанию:

def parse(self, response): 
    titles = response.selector.xpath("//section[@id='pagecontainer']") 
    items = [] 
    for titles in titles: 
     item = CraigslistSampleItem() 
     item["img"] = titles.xpath(".//div[@class='tray']").extract() 
     item["body"] = titles.xpath(".//section[@id='postingbody']/text()").extract() 
     item["itemID"] = titles.xpath(".//div[@class='postinginfos']/p[@class='postinginfo']").extract() 
     items.append(item) 
Смежные вопросы