使用Python中的漂亮汤在html页面上调用“on click event”的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python中的漂亮汤在html页面上调用“on click event”的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2235字,纯文字阅读大概需要4分钟。
内容图文
我试图抓取网页上所有项目的名称,但默认情况下,页面上只显示18个项目.我的代码只抓取那些.您可以通过单击“全部显示”按钮查看所有项目,但该按钮是Javascript.
经过一番研究,我发现PyQt模块可以用来解决这个涉及javascript按钮的问题.我用它但我仍然无法调用“on click”事件.以下是推荐代码:
import csv
import urllib2
import sys
import time
from bs4 import BeautifulSoup
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
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://www.att.com/shop/wireless/devices/smartphones.html'
r = Render(url)
jsClick = var evObj = document.createEvent('MouseEvents');
evObj.initEvent('click', true, true );
this.dispatchEvent(evObj);
allSelector = "a#deviceShowAllLink" # This is the css selector you actually need
allButton = r.frame.documentElement().findFirst(allSelector)
allButton.evaluateJavaScript(jsClick)
page = allButton
soup = BeautifulSoup(page)
soup.prettify()
with open('Smartphones_26decv1.0.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',')
spamwriter.writerow(["Date","Day of Week","Device Name","Price"])
items = soup.findAll('a', {"class": "clickStreamSingleItem"},text=True)
prices = soup.findAll('div', {"class": "listGrid-price"})
for item, price in zip(items, prices):
textcontent = u' '.join(price.stripped_strings)
if textcontent:
spamwriter.writerow([time.strftime("%Y-%m-%d"),time.strftime("%A") ,unicode(item.string).encode('utf8').strip(),textcontent])
我在这面临的错误如下:
"Invalid Syntax" Error for evObj
有人可以帮助我调用这个“onclick”事件,以便我能够抓取所有项目的数据.请原谅我的无知,因为我是编程的新手.
解决方法:
要单击该按钮,您必须在对象上调用evaluateJavascript:
jsClick = """var evObj = document.createEvent('MouseEvents');
evObj.initEvent('click', true, true );
this.dispatchEvent(evObj);
"""
allSelector = "a#deviceShowAllLink" # This is the css selector you actually need
allButton = r.frame.documentElement().findFirst(allSelector)
allButton.evaluateJavaScript(jsClick)
内容总结
以上是互联网集市为您收集整理的使用Python中的漂亮汤在html页面上调用“on click event”的问题全部内容,希望文章能够帮你解决使用Python中的漂亮汤在html页面上调用“on click event”的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。