2015-07-01 3 views
0

Я пробовал соскабливать сайт javascript, используя два инструмента, оба не работали. Ссылка сайта: http://xx.xxx.com/category-499399872.htm Соответствующий текст, который я пытаюсь извлечь это GY-68 ...:Javascript веб-сайт соскабливание с использованием инструментов WebKit и Selenium

<div class="item3line1"> 

    <dl class="item " data-id="38952795780"> 
     <dt class="photo"> 
      <a target="_blank" href="//item.xxx.com/item.htm?spm=a1z10.5-c.w4002-6778075404.11.54MDOI&id=38952795780" data-spm-wangpu-module-id="4002-6778075404" data-spm-anchor-id="a1z10.5-c.w4002-6778075404.11"> 
       <img src="//img.xxx.com/bao/uploaded/i4/TB1HMt3FFXXXXaFaVXXXXXXXXXX_!!0-item_pic.jpg_240x240.jpg" alt="GY-68 BMP180 新款 BOSCH温度 气压传感器模块 代替BMP085"></img> 
      </a> 
     </dt> 

Я пытаюсь соответствовать классу = «пункт» бит в качестве предварительного предприятие:

from pyvirtualdisplay import Display 
from selenium import webdriver 
import time 

display = Display(visible=0, size=(800, 600)) 
display.start() 

browser = webdriver.Firefox() 
browser.get('http://xxxx.com/category-499399872.htm') 
print browser.title 

time.sleep(120)  
content = browser.find_element_by_class_name('item ') 
print content 
browser.quit() 

display.stop() 

я получаю:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"class name","selector":"item "} 

Я также попытался с помощью WebKit - я знаю, что сайт делает хорошо в WebKit, потому что я тестировал с Rekonq Здесь я получаю страницу (на китайском языке), но фактические/соответствующие данные не существует. WebKit должен запустить Javascript и дать мне окончательные результаты, но я не думаю, что это происходит.

import sys 
from io import StringIO 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 
from lxml import html 
from lxml import etree 

#Take this class for granted.Just use result of rendering. 
class Render(QWebPage): 
    def __init__(self, url): 
    self.app = QApplication(sys.argv) 
    QWebPage.__init__(self) 
    self.loadFinished.connect(self._loadFinished) 
    self.mainFrame().load(QUrl(url)) 
    self.app.exec_() 

    def _loadFinished(self, result): 
    self.frame = self.mainFrame() 
    self.app.quit() 

url = 'http://xxxx.com/category-499399872.htm' 
r = Render(url) #returns a Render object 
result = r.frame.toHtml() #returns a QString 
result_utf8 = result.toUtf8() #returns a QByteArray of utf8 data 

#QByteArray->str->unicode 
#contents = StringIO(unicode(result_utf8.data(), "utf-8")) 
data = result_utf8.data() #returns byte string 
print(data) 

element = html.fromstring(data) 
print(element.tag) 

for img in element.xpath('//dl[@class="item "]/dt[@class="photo"]/a/img'): 
    print(img.get('alt')) 

#archive_links = html.fromstring(str(result.toAscii())) 
#print archive_links.xpath("/html/body/div[2]/div[3]/div[2]/div[2]/div[1]/div/div/div/div/div/div[2]/div[2]/dl[1]/dt/a/img") 

В основном я хочу список запчастей продавец может предложить, что я могу Grep, сортировать, уник. Я также пробовал elinks и рысь с ECMAScript, но это было слишком просто и не работало.

+0

Там нет элемента с именем класса «Col-главный» в html-фрагменте, который вы предоставили? –

+0

darn, извините, я исправлю это - я не могу соответствовать ни одному из этих атрибутов «фотография» или «имя-элемента» - на самом деле ничто из этого не существует для какой-то таинственной причины. WebKit не выполняет JS или что-то в этом роде. Во всяком случае, я работал над этими сценариями и менял вещи, но они в основном правильные - исправят –

+0

grr! «фото» или «элемент» отсутствуют на выходе веб-сайта, насколько мне известно –

ответ

0

Возможно, это глупое предложение, но вы пытаетесь найти элемент по имени класса «col-main», в то время как код примера имеет имя класса «item-name».

0

Существует пространство во имя класса это «элемент» не «item'.For, что вы должны переписать в XPath

//dl[@class="item "]/dt[@class="photo"]/a/img 

Существует возможность переопределить that.You можно использовать normalize-space() функция, которая разделяет ведущее и конечное белое пространство от строки.

//dl[normalize-space(@class)="item"]/dt[@class="photo"]/a/img 

Или вы можете пойти с

//a[@class='item-name'] 

также относится к элементу, и текст равен атрибуту альт в IMG в

Смежные вопросы