Я использую Scrapy + Splash для сканирования веб-страниц и пытаюсь извлечь данные из рекламных баннеров Google и других объявлений, и мне трудно получить scrapy, чтобы следовать в них по xpath.
Я использую Scrpay-Splash API для рендеринга страниц, чтобы их скрипты и изображения загрузить и сделать снимки экрана, но кажется, что рекламные баннеры Google создаются сценариями JS, которые затем вставляют свое содержимое в новый html-документ в iframe на веб-странице, например:
Splash гарантирует, что код отображается, поэтому я не сталкиваюсь с обычной проблемой scrapy со сценариями, когда он читает содержимое сценария, а не результирующий html, но я не могу найти способ указать XPath, необходимый для добраться до нужных мне узлов элементов (ссылка href в объявлении).
Если я проверю элемент в Google и скопирую его xpath, он просто даст мне //*[@id="aw0"]
, который, как мне кажется, работал бы, если бы html iframe был всем, что здесь было, но он возвращает пустой, независимо от того, как я его пишу, и я чувствую, что это, вероятно, потому, что XPath не Не элегантно обрабатывают html-документы, уложенные в html-документы.
XPath для iframe, содержащего рекламный код Google, равен
//*[@id="google_ads_iframe_/87824813/hola/blogs/home_0"]
{числа постоянны}.
Есть ли способ сложить эти XPath вместе, чтобы scrapy проследовал по следу в нужный мне контейнер? Или мне следует анализировать объект ответа Splash напрямую каким-либо другим способом, и я не могу полагаться на Response.Xpath / Response.CSS для этого?
view(response)
должно дать вам больше шансов найти ошибку / проверить свой xpath. - person Casper   schedule 20.06.2017