python html 鼠标点击,使用Python中的beautifulsoup在html页面上调用“on-click事件”的问题...

我试图刮取网页上出现的所有项目的名称,但默认情况下只有18个项目在页面上可见&我的代码只抓取这些项目。您可以通过单击“ShowAll”按钮查看所有项目,但该按钮使用的是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])

我在这方面面临的错误如下:

^{pr2}$

有人能帮我调用这个“onclick”事件,这样我就可以为所有人收集数据了吗物品。什么我的无知,因为我是编程新手。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我不能提供源代码。但是,我可以给你一些提示和建议来实现这个项目。 你可以按照以下步骤来实现这个项目: 1. 导入必要的库,包括 requests 和 BeautifulSoup。 2. 定义一个函数来获取京东商城的书籍信息。这个函数应该接受一个参数,即要搜索的书籍关键字。在函数使用 requests 库来获取该关键字的搜索结果页面,并使用 BeautifulSoup 库来解析 HTML。 3. 从搜索结果页面提取出每个书籍的信息,包括书名、作者、出版社、价格等。 4. 将提取出的书籍信息存储到一个列表。 5. 返回包含所有书籍信息的列表。 下面是一份示例代码,你可以参考这个示例来实现你的代码: ``` import requests from bs4 import BeautifulSoup def get_book_info(keyword): url = 'https://search.jd.com/Search' params = { 'keyword': keyword, 'enc': 'utf-8', 'qrst': '1', 'rt': '1', 'stop': '1', 'vt': '2', 'page': '1', 's': '1', 'click': '0' } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } resp = requests.get(url, params=params, headers=headers) soup = BeautifulSoup(resp.text, 'html.parser') book_list = [] for item in soup.select('li.gl-item'): book = {} book['name'] = item.select_one('div.p-name a em').text.strip() book['author'] = item.select_one('div.p-bookdetails span:nth-of-type(1) a').text.strip() book['publisher'] = item.select_one('div.p-bookdetails span:nth-of-type(2) a').text.strip() book['price'] = item.select_one('div.p-price i').text.strip() book_list.append(book) return book_list ``` 你可以调用这个函数并传入书籍关键字,例如: ``` books = get_book_info('Python') for book in books: print(book) ``` 这个示例代码只是一个简单的实现,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值