Scrapy выбрать элементы HTML, которые имеют определенное имя атрибута - PullRequest
1 голос
/ 04 ноября 2019

Существует такой HTML-код:

<div>
    <div data-id="1"> </div>
    <div data-id="2"> </div>
    <div data-id="3"> </div>
    ...
    <div> </div> 
</div>

Мне нужно выбрать внутреннюю div, имеющую только атрибут data-id (независимо от значений). Как мне добиться этого с помощью Scrapy?

Ответы [ 4 ]

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

Вы можете использовать следующее

response.css('div[data-id]').extract()

Это даст вам список всех div с атрибутом data-id.

[u'<div data-id="1"> </div>',
 u'<div data-id="2"> </div>',
 u'<div data-id="3"> </div>']
0 голосов
/ 04 ноября 2019
 scrapy shell
In [1]: b = '''
   ...: <div>
   ...:     <div data-id="1">gdfg </div>
   ...:     <div data-id="2">dgdfg </div>
   ...:     <div data-id="3">asdasd </div>
   ...:     <div> </div>
   ...: </div>
   ...: '''
In [2]: from scrapy import Selector

In [3]: sel = Selector(text=b, type="html")

In [4]: sel.xpath('//div[re:test(@data-id,"\d")]/text()').extract()
Out[4]: ['gdfg ', 'dgdfg ', 'asdasd ']
0 голосов
/ 04 ноября 2019
<li class="gb_i" aria-grabbed="false">
<a class="gb_d" data-pid="192" draggable="false" href="xyz.com" id="gb192">
<div data-class="gb_u"></div>
<div data-class="gb_v"></div>
<div data-class="gb_w"></div>
<div data-class="gb_x"></div>
</a>
</li>

Посмотрите и приведенный выше пример HTML-кода. Чтобы получить все div, содержащие data-class в Scrapy v1.6 +

response.xpath('//a[@data-pid="192"]/div[contains(@data-class,"")]').getall()

В scrapy версии <1.6 вы можете использовать extract () вместо getall (). Надеюсь, это поможет </p>

0 голосов
/ 04 ноября 2019

Используйте BeautifulSoup. Код

from bs4 import BeautifulSoup

soup = BeautifulSoup("""<div> <div data-id="1"> </div> <div data-id="2"> </div>  <div data-id="3"> </div><div> </div> </div>""")  

print(soup.find_all("div", {"data-id":True}))

ВЫХОД:

[<div data-id="1"> </div>, <div data-id="2"> </div>, <div data-id="3"> </div>]

Вы можете указать, какой атрибут должен присутствовать в find или find_all со значением True

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