Как изменить значение атрибута стиля в теге div в процессе утилизации с помощью scrapy? - PullRequest
0 голосов
/ 30 октября 2018

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

Здесь ссылка на страницу

Давайте покажем, что именно я собираюсь записать.

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

enter image description here Как вы можете видеть на этой странице, содержимое вкладки «COTES» фактически скрыто в html-рендере, как вы можете видеть в redbox.

Но я заметил, что если я изменю в < div id="pariCotesTab" class="tab" style="display: none;" атрибут style на style="display: block;", появится скрытая html-часть: вы можете увидеть это на втором изображении .

Когда я использую scrapy shell https://www.zeturf.fr/fr/course/2018-10-19/R1C1-vincennes-prix-klymene/turf и пытаюсь получить элемент вкладки «КОТЫ», например, In [1]: response.xpath("//td[@class='cote-simplegagnant cote-reference']/text()").extract(), он ничего не возвращает Out 1: [], что логично, но блокирует меня.

Итак, как можно изменить атрибут style на style="display: block;" в процессе скрапа? и получить то, что я хочу записать на вкладке "КОТЫ".

Я хотел бы упомянуть, я предпочитаю не использовать всплеск, потому что это был ад для меня с установкой докера и так далее ... Я не буду использовать селен, потому что я хочу отказаться около 1000 страниц, а может и больше. Я использовал селен для предыдущего проекта, и работа в сети с любым браузером - просто трата времени на утилизацию. Это прежде всего веб-тестер, а не веб-сканер и не модуль веб-браузера.

Версия Scrapy: 1.5.0, версия Python: 2.7.9

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Итак, изящество ответа на вопрос stranac Я нашел то, что мне было нужно. Здесь вы можете увидеть в инспекторе вкладку «КОТЫ» в html в теге <script. Here the odds to scrap in a script tag of the html С odds_raw = response.xpath("//script[@type='text/javascript']").extract()[6] я получаю то, что хочу. Но это довольно сыро. Поэтому я воспользовался советом Мишеля Иня в учебнике, с которым вы можете ознакомиться здесь . А вот еще один пример для stack .

Итак, с помощью команды odds = re.search('({"referenceDateTime")(.*?)(\\n)', odds_raw).group() я получил это

Out[65]: u'{"referenceDateTime":{"date":"2018-10-19 19:30:00.000000","timezone_t
ype":3,"timezone":"Europe\\/Paris"},"meilleureCoteSG":{"reference":3.3,"live":3.
6},"displayedColumns":{"hasSG":1,"hasSP":1,"hasZC":1,"hasZS":1},"1":{"odds_singl
e":27.2,"odds_couillon":11.7,"odds_zeshow":29,"odds":{"reference":36.4,"SG":27.2
,"SPMin":5,"SPMax":9.1,"ZC":11.7,"ZS":29},"oddsprogress_single":"moins"}...}}\n'

Теперь я использую функцию json.loads, json.loads(odds), тогда я получил словарь Python.

0 голосов
/ 30 октября 2018

Ваша проблема не в том, что вы предполагали.

Scrapy не волнует, какие стили CSS используются (если вы явно не используете их в селекторах), только о том, что присутствует в источнике страницы.
Источник вашей страницы содержит что-то вроде этого:

<th class="cote-simplegagnant cote-reference"></th>

Как видите, выбранные вами th пусты, и позже они заполняются javascript.
При более внимательном рассмотрении источника вы можете найти тег script, содержащий необходимую информацию:

cotesInfos: {"referenceDateTime":{"date":"2018-10-19 19:30:00.000000","timezone_type":3,"timezone":"Europe\/Paris"},"meilleureCoteSG":{"reference":3.3,"live":3.6},"displayedColumns":{"hasSG":1,"hasSP":1,"hasZC":1,"hasZS":1},"1":{"odds_single":27.2,"odds_couillon":11.7,"odds_zeshow":29,"odds":{"reference":36.4,"SG":27.2,"SPMin":5,"SPMax":9.1,"ZC":11.7,"ZS":29},"oddsprogress_single":"moins"},"2":{"odds_single":13.3,"odds_couillon":13.6,"odds_zeshow":11.4,"odds":{"reference":14.5,"SG":13.3,"SPMin":2.3,"SPMax":4.1,"ZC":13.6,"ZS":11.4}},"3":{"odds_single":3.7,"odds_couillon":7.2,"odds_zeshow":8,"odds":{"reference":6.8,"SG":3.7,"SPMin":1.2,"SPMax":1.8,"ZC":7.2,"ZS":8},"oddsprogress_single":"moins"},"4":{"odds_single":274.1,"odds_couillon":19.6,"odds_zeshow":40.9,"odds":{"reference":168.9,"SG":274.1,"SPMin":13.5,"SPMax":41.7,"ZC":19.6,"ZS":40.9},"oddsprogress_single":"plus"},"5":{"odds_single":20.2,"odds_couillon":9,"odds_zeshow":13.1,"odds":{"reference":16,"SG":20.2,"SPMin":2.9,"SPMax":5.2,"ZC":9,"ZS":13.1},"oddsprogress_single":"plus"},"6":{"odds_single":9.4,"odds_couillon":11.7,"odds_zeshow":12.6,"odds":{"reference":4.8,"SG":9.4,"SPMin":3.2,"SPMax":5.8,"ZC":11.7,"ZS":12.6},"oddsprogress_single":"plus"},"7":{"odds_single":32.3,"odds_couillon":9.8,"odds_zeshow":11.4,"odds":{"reference":27.9,"SG":32.3,"SPMin":5.1,"SPMax":9.2,"ZC":9.8,"ZS":11.4},"oddsprogress_single":"plus"},"8":{"odds_single":78.2,"odds_couillon":16.3,"odds_zeshow":34.8,"odds":{"reference":109.3,"SG":78.2,"SPMin":8,"SPMax":14.7,"ZC":16.3,"ZS":34.8},"oddsprogress_single":"moins"},"9":{"odds_single":7.1,"odds_couillon":9.9,"odds_zeshow":9.5,"odds":{"reference":11.2,"SG":7.1,"SPMin":1.5,"SPMax":2.5,"ZC":9.9,"ZS":9.5},"oddsprogress_single":"moins"},"10":{"odds_single":3.6,"odds_couillon":18.9,"odds_zeshow":2.9,"odds":{"reference":3.3,"SG":3.6,"SPMin":1.6,"SPMax":2.7,"ZC":18.9,"ZS":2.9}},"11":{"odds_single":16.4,"odds_couillon":9.6,"odds_zeshow":13.1,"odds":{"reference":14.4,"SG":16.4,"SPMin":3.4,"SPMax":6,"ZC":9.6,"ZS":13.1},"oddsprogress_single":"plus"},"12":{"odds_single":21.3,"odds_couillon":6.7,"odds_zeshow":10,"odds":{"reference":23.3,"SG":21.3,"SPMin":3.8,"SPMax":6.8,"ZC":6.7,"ZS":10}},"13":{"odds_single":40.9,"odds_couillon":21,"odds_zeshow":27.8,"odds":{"reference":20.1,"SG":40.9,"SPMin":5.8,"SPMax":10.6,"ZC":21,"ZS":27.8},"oddsprogress_single":"plus"},"14":{"odds_single":34.8,"odds_couillon":10.8,"odds_zeshow":20.4,"odds":{"reference":22.2,"SG":34.8,"SPMin":5.2,"SPMax":9.5,"ZC":10.8,"ZS":20.4},"oddsprogress_single":"plus"}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...