使用WebKit和Selenium工具进行Javascript网站抓取
Javascript website scraping using WebKit and Selenium tools
我尝试使用两种工具抓取javascript网站,但都不起作用。网站链接为:http://xx.xxx.com/category-499399872.htm我试图提取的相关文本是GY-68…:
<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>
我正在尝试匹配class="item"位作为初步风险:
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,sort,uniq。我还使用ECMAScript尝试了elinks和lynx,但这太基本了,不起作用。
也许这是一个愚蠢的建议,但您正试图通过类名"col-main"找到一个元素,而示例代码的类名为"item-name"。
类名中有一个空格,它是'item'而不是'item'。为此,您必须将xpath重写为
//dl[@class="item "]/dt[@class="photo"]/a/img
有一个选项可以替代它。您可以使用normalize-space()
函数从字符串中去除前导空格和尾随空格。
//dl[normalize-space(@class)="item"]/dt[@class="photo"]/a/img
或者你可以选择
//a[@class='item-name']
也指元素,并且文本等于img的alt属性
相关文章:
- 我想用Javascript网站在开放的Chrome浏览器上执行功能
- 使用指针为ios应用程序&Javascript网站
- 在前端javascript网站中弹出图片
- JavaScript网站与工作实例
- 带有HTML5元素的JavaScript网站欢迎加载器
- 将当前 URL 附加到 Javascript 网站徽章嵌入以进行跟踪
- 来自 JavaScript 网站的推文输入字段
- 如何识别正在运行的 JavaScript 网站
- 我如何使用java与javascript网站进行交互
- 使用Chrome抓取工具从JavaScript网站中提取数据
- 正在寻找一个杀手级的javascript/网站监控/调试工具
- JavaScript -网站可以看到用户脚本生成的错误/控制台日志吗?
- Javascript网站搜索在CD-ROM网站没有复制和粘贴
- JavaScript网站漏洞
- 什么版本控制软件将是最好的HTML/CSS/JavaScript网站
- 谷歌更新和AngularJS/JavaScript网站
- 为多模块Javascript网站应用Backbone.js
- Javascript:网站上描述框的onmouseover函数
- 使用WebKit和Selenium工具进行Javascript网站抓取
- 在javascript网站中保持测验分数