Я строю скребок, который нужно скопировать цены с десятка разных сайтов.Почему этот xpath не работает с помощью PhantomJS?
Все веб-сайты используют JS, чтобы показать цену, поэтому я пошел с селеном, чтобы очистить необходимые данные.
Прежде чем начать строить скребок, я создал список xpaths, мне нужно получить элемент цены для каждого URL-адреса, который я соскабливал во внешнем файле.
Я получил эти XPath с помощью FireFox и Firebug, Hoàwever я получаю errror, каждый раз я пытаюсь получить эти элементы с селеном (драйвер PhantomJS):
selenium.common.exceptions.NoSuchElementException: Message: {"errorMessage":"Una
ble to find element with xpath './div'","request":{"headers":{"Accept":"applicat
ion/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"89
","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:51048","User
-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"usin
g\": \"xpath\", \"sessionId\": \"27f41b80-cf63-11e6-bbcc-13b1a315759a\", \"value
\": \"./div\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"ele
ment","directory":"/","path":"/element","relative":"/element","port":"","host":"
","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/
element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/27f41b80-cf
63-11e6-bbcc-13b1a315759a/element"}}
кажется, что мой XPath является неправильным, однако я дважды проверял его, используя другие плагины, и это правильно каждый раз, когда я проверяю этот xpath на Firefox.
Вот два разных XPaths, что оба должны работать, (они с помощью FIRFOX, но не с селеном):
"id('regular-hero')/div[3]/div[1]/div[2]/div/div[1]/div/div/span"
"/html/body/div[2]/div[3]/div[1]/div[2]/div/div[2]/div/div/span/text()[1]"
А вот это целевая страница HTML код Here
И вот код, чтобы получить elemnts с помощью селена:
self.browser = wd.PhantomJS()
for n in xrange(len(self.url_list)):
url = self.url_list[n]
provider = self.provider_list[n]
self.browser.get(url)
for plan in provider:
for hosting_plan in provider[plan]:
xpath = hosting_plan.values()[0] # Get the xpath of a plan
price_elem = self.browser.find_element_by_xpath("//*")
print price_elem
self.browser.close()
Все петли используются для обхода внешнего файла JSON, которые держат список XPATH.
Что не так? Что я должен попробовать? Может ли lxml помочь мне (учитывая, что HTML-код иногда нарушается)?
Показать 'HTML' код целевого элемента – Andersson
@ Andersson Я добавил ссылку на HTML-код целевой страницы. –
Вы можете сделать интерактивный Selenium scrapping для проблемного объекта и экспортировать код в Python. Он должен указать вам, что вы делаете неправильно. – boardrider