Scrapy показва xpath текст с помощта на lxml

Как мога да накарам моята parse_page да показва текста и числовата стойност за заглавието на моя артикул? Мога да покажа само href.

    def parse_page(self, response):
    self.log("\n\n\n Page for one device \n\n\n")
    self.log('Hi, this is the parse_page page! %s' % response.url)
    root = lxml.etree.fromstring(response.body)
    for row in root.xpath('//row'):
        allcells = row.xpath('./cell')
        #... populate Items
    for cells in allcells:
        item = CiqdisItem()
        item['title'] = cells.get(".//text()")
        item['link'] = cells.get("href")
        yield item

моя xml файл

<row>
<cell type="html">
<input type="checkbox" name="AF2C4452827CF0935B71FAD58652112D" value="AF2C4452827CF0935B71FAD58652112D" onclick="if(typeof(selectPkg)=='function')selectPkg(this);">
</cell>
<cell type="plain" style="width: 50px; white-space: nowrap;" visible="false">http://qvpweb01.ciq.labs.att.com:8080/dis/metriclog.jsp?PKG_GID=AF2C4452827CF0935B71FAD58652112D&amp;view=list</cell>
<cell type="plain">6505550000</cell>
<cell type="plain">probe0</cell>
<cell type="href" style="width: 50px; white-space: nowrap;" href="/bgmetriclog.jsp?PKG_GID=AF2C4452827CF0935B71FAD58652112D&view=list">
UPTR
<input id="savePage_AF2C4452827CF0935B71FAD58652112D" type="hidden" value="AF2C4452827CF0935B71FAD58652112D">
</cell>
<cell type="href" href="/bg/dis/packages.jsp?show=perdevice&device_gid=3651746C4173775343535452414567746D75643855673D3D53564A6151624D41716D534C68395A6337634E2F62413D3D&hwdid=probe0&mdn=6505550000&subscrbid=6505550000&triggerfilter=&maxlength=100&view=timeline&date=20100716T050314876" style="white-space: nowrap;">2010-07-16 05:03:14.876</cell>
<cell type="plain" style="width: 50px; white-space: nowrap;"></cell>
<cell type="plain" style="white-space: nowrap;"></cell>
<cell type="plain" style="white-space: nowrap;">2012-10-22 22:40:15.504</cell>
<cell type="plain" style="width: 70px; white-space: nowrap;">1 - SMS_PullRequest_CS</cell>
<cell type="href" style="width: 50px; white-space: nowrap;" href="/bg/dis/profile_download?profileId=4294967295">4294967295</cell>
<cell type="plain" style="width: 50px; white-space: nowrap;">250</cell>
</row>

Ето последната ми редакция по-долу, показвам и двата метода. Проблемът е, че първият метод не анализира всички връзки в колона A по ред, не е в ред и ако колона A е нула, той хваща следващата връзка от колона B. Как мога да покажа само колона A и ако колона A е null го пропуснете и отидете надолу в същата колона A?

Метод 2 parse_page. Не повтаря всички редове. Това е непълен анализ. Как мога да получа всички редове?

    def parse_device_list(self, response):
    self.log("\n\n\n List of devices \n\n\n")
    self.log('Hi, this is the parse_device_list page! %s' % response.url)
    root = lxml.etree.fromstring(response.body)
    for row in root.xpath('//row'):
        allcells = row.xpath('.//cell')
        # first cell contain the link to follow
        detail_page_link = allcells[0].get("href")
        yield Request(urlparse.urljoin(response.url, detail_page_link ), callback=self.parse_page)

    def parse_page(self, response):
    self.log("\n\n\n Page for one device \n\n\n")
    self.log('Hi, this is the parse_page page! %s' % response.url)
    xxs = XmlXPathSelector(response)
    for row in xxs.select('//row'):
       for cell in row.select('.//cell'):
           item = CiqdisItem()
           item['title'] = cell.select("text()").extract()
           item['link'] = cell.select("@href").extract()
           yield item

person Gio    schedule 24.07.2013    source източник


Отговори (1)


Просто заменете .//text() с text() и href с @href.

Освен това, защо lxml? Scrapy има вградени xpath селектори, опитайте го:

def parse_page(self, response):
    hxs = HtmlXPathSelector(response)
    for row in hxs.select('//row'):
        for cell in row.select('.//cell'):
           item = CiqdisItem()
           item['title'] = cell.get("text()")
           item['link'] = cell.get("@href")
           yield item
person alecxe    schedule 24.07.2013
comment
Благодаря @alecxe - просто трябваше да променя от hxs на xxs = XmlXPathSelector(response). Също така публикувах друг въпрос връзка към втория ми въпрос конвертиране на lxml в scrapy build xxs . За този първо се опитах да го направя в xxs, но не успях, докато някой не ми каза, че може би е опитал lxml, за да го накара да работи, и той наистина работи в lxml. - person Gio; 25.07.2013
comment
Хей @alecxe - след като анализирах моя уеб робот, забелязах, че това не анализира всички редове за всяка таблица, а само отделя няколко реда, но не всички. Всички редове са на една и съща страница. (не ограничава редовете на страница.) Може би ще помогне, ако редактирам въпроса си и поставя и двата си метода. - person Gio; 26.07.2013