Извлечение совета // тд текст и цифры - PullRequest
0 голосов
/ 27 марта 2012

Я работал над учебником, адаптируя его к проекту, которого я хочу достичь.Кажется, у меня что-то идет не так, что я просто не могу найти ошибку.

При использовании 'scrapy shell' я могу получить ожидаемый ответ.Так что для этого сайта Nrl Ladder

In [1]: hxs.select('//td').extract()
Out[1]: 
[u'<td>\r\n<div id="ls-nav">\r\n<ul><li><a href="http://www.nrlstats.com/"><span>Home</span></a></li>\r\n<li class="ls-nav-on"><a href="/nrl"><span>NRL</span></a></li>\r\n<li><a href="/nyc"><span>NYC</span></a></li>\r\n<li><a href="/rep"><span>Rep Matches</span></a></li>\r\n\r\n</ul></div>\r\n</td>',
 u'<td style="text-align:left" colspan="5">Round 4</td>',
 u'<td colspan="5">Updated: 26/3/2012</td>',
 u'<td style="text-align:left">1. Melbourne</td>',
 u'<td>4</td>',
 u'<td>4</td>',
 u'<td>0</td>',
 u'<td>0</td>',
 u'<td>0</td>',
 u'<td>122</td>',
 u'<td>39</td>',
 u'<td>83</td>',
 u'<td>8</td>',
 u'<td style="text-align:left">2. Canterbury-Bankstown</td>',

И так далее.

Я действительно изо всех сил пытаюсь понять, как изменить учебный проект, чтобы изменить его на другойтип данных.

Есть ли в любом случае, чтобы вызвать список справки или документации, чтобы увидеть, какие типы я должен использовать в элементах при использовании 'td' или любого другого элемента.Как я уже сказал, он легко работает в оболочке, но я не могу преобразовать его в файлы.В частности, как названия команд, так и очки указаны как 'td', но название команды - текст.

вот что я сделал.

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from nrl.items import NrlItem

class nrl(BaseSpider):
    name = "nrl"
    allowed_domains = ["http://live.nrlstats.com/"]
    start_urls = [
        "http://live.nrlstats.com/nrl/ladder.html",
        ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//td')
        items = []
        for site in sites:
           item = nrlItem()
           item['team'] = site.select('/text()').extract()
           item['points'] = site.select('/').extract()
           items.append(item)
        return items

1 Ответ

2 голосов
/ 27 марта 2012

Я не совсем понял ваш вопрос, но вот отправная точка, IMO (не проверял; см. Некоторые комментарии в коде):

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from nrl.items import NrlItem

class nrl(BaseSpider):
    name = "nrl"
    allowed_domains = ["live.nrlstats.com"] # domains should be like this
    start_urls = [
        "http://live.nrlstats.com/nrl/ladder.html",
        ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        rows = hxs.select('//table[@class="tabler"]//tr[starts-with(@class, "r")]') # select team rows
        items = []
        for row in rows:
           item = nrlItem()
           columns = row.select('./td/text()').extract() # select columns for the selected row
           item['team'] = columns[0]
           item['P'] = int(columns[1])
           item['W'] = int(columns[2])
           ...
           items.append(item)
        return items

UPDATE:

//table[@class="tabler"//tr[starts-with(@class, "r")] - это запрос xpath. Смотрите некоторые примеры xpath здесь .

hxs.select(xpath_query) всегда возвращает список узлов (также типа HtmlXPathSelector), которые подпадают под данный запрос.

hxs.extract() возвращает строковое представление узла (ов).

P.S. Помните, что scrapy поддерживает XPath 1.0, но не 2.0 (по крайней мере, в Linux, не уверен в Windows), поэтому некоторые из новейших функций xpath могут не работать.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...