#python #css #web-scraping #xpath #scrapy
Вопрос:
Мне нужно выбрать первое изображение, которое я увижу (вверх по DOM) после ссылки. У меня есть такой код, но он почему-то не работает, где может быть ошибка?
for doc in response.css('a::attr("href")'): if '/mans/' in doc.get(): image = doc.xpath(f'//a[href={doc.get()}]/preceding::img[1]') print(image)
может ли быть синтаксическая ошибка? вот пример проанализированной страницы…
lt;tbodygt; lt;trgt; lt;tdgt; lt;img src="Resources/Images/Product images, logos/Alta, Alta HR/Alta_Black_Calendar_Horizontal_Shadow.png" alt="Fitbit Alta with the time shown on the screen" /gt; lt;/tdgt; lt;tdgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_de.pdf" target="_blank"gt;Deutschlt;/agt; lt;/pgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_en_US.pdf" target="_blank"gt;Englishlt;/agt; lt;/pgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_es.pdf" target="_blank"gt;Españollt;/agt; lt;/pgt; lt;/tdgt; lt;tdgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_fr.pdf" target="_blank"gt;Françaislt;/agt; lt;/pgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_it.pdf" target="_blank"gt;Italianolt;/agt; lt;/pgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_ja.pdf" target="_blank"gt;日本語lt;/agt; lt;/pgt; lt;/tdgt; lt;tdgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_ko.pdf" target="_blank"gt;한국어lt;/agt; lt;/pgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_zh_CN.pdf" target="_blank"gt;简体中文lt;/agt; lt;/pgt; lt;pgt;lt;a href="https://help.fitbit.com/manuals/manual_alta_zh_TW.pdf" target="_blank"gt;繁體中文lt;/agt; lt;/pgt; lt;/tdgt; lt;/trgt; lt;/tbodygt;
Комментарии:
1. Можете ли вы поделиться воспроизводимым кодом, который мы можем вам предоставить?
2. @Geomario добавил html-выдержку к вопросу…
Ответ №1:
Поставьте @ перед href в вашем заявлении xpath, и это должно сработать, учитывая, что элемент перед ссылкой является изображением.
f'//a[@href={doc.get()}]/preceding::img[1]'