Python Scrapy получить детали из списка таблиц - PullRequest
0 голосов
/ 05 ноября 2019

Мне нужен номер ISBN из таблицы ... Я попробовал некоторые вещи, подобные тому примеру, который я сейчас показываю, но он не работает, чтобы получить ISBN.

Моя идея была, запустите все tr для цикла forчтобы получить каждый тд там. Чем, если я нашел «ISBN» в одном тд, получи следующий тд и текст .span из него, потому что есть число.

for tr in response.css('.ry-product-details__fullscreen-scrollable table tr'):
        td = tr.css('::text')[0].extract().strip()
        print(td)
        if "ISBN" in td:
            isbn = tr.css('td .span::text')[0].extract().strip()
            print(isbn)

Таблица выглядит так (изображение) нажмите здесь

Код таблицы выглядит следующим образом:

<table class="table ry-table ry-content-page__table">
    <thead>
        <tr>
        <th colspan="2">Details</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Bluetooth</td>
            <td><span>Ja</span></td>
        </tr>
        <tr>
            <td>EAN / ISBN-13</td>
            <td><span>0888462149143, 5055887319009, 0888462149082</span></td>
        </tr>
        <tr>
            ..... some more here ...
        </tr>

Так что мне нужен этот текст промежутка td там же, где находится ISBN. Но также проблема в том, что if "ISBN" in td: не работает, потому что иногда после него есть "-" ...

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Использование XPath:

response.xpath('//td[.="EAN / ISBN-13"]/following-sibling::td[1]/text()').get()
1 голос
/ 06 ноября 2019
   scrapy shell 
In [1]: body=''' <tr>
       ...:             <td>Bluetooth</td>
       ...:             <td><span>Ja</span></td>
       ...:         </tr>
       ...:         <tr>
       ...:             <td>EAN / ISBN-13</td>
       ...:             <td><span>0888462149143, 5055887319009, 08884
       ...: 62149082</span></td>
       ...:         </tr>'''
    In [2]: from scrapy import Selector

    In [3]: sel = Selector(text=body, type="html")
    In [4]: sel.xpath("//tr[contains(., 'ISBN')]/td[2]/span/text()").extract()
    Out[5]: ['0888462149143, 5055887319009, 0888462149082']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...