gpt4 book ai didi

python - 希望每天抓取网站并设置警报

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:22 28 4
gpt4 key购买 nike

我需要运行一个每天抓取以下站点的脚本(当脚本运行时,它会抓取当天的日历)(相当于单击“每日”按钮)

http://www.fxempire.com/economic-calendar/

我想提取特定日期的所有日期数据/事件,并过滤相关货币(如果适用),然后创建某种警报或在每个事件发生前 10 分钟弹出.

到目前为止,我正在使用以下代码抓取网页,然后查看/打印变量“html”,但找不到我需要的日历信息。

import sys  
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.fxempire.com/economic-calendar/'
r = Render(url)
html = r.frame.toHtml()

最佳答案

在我看来,从网页中抓取数据的最佳方式是使用 BeautifulSoup .这是一个快速脚本,可以获取您想要的数据。

import re
from urllib2 import urlopen
from bs4 import BeautifulSoup


# Get a file-like object using urllib2.urlopen
url = 'http://ecal.forexpros.com/e_cal.php?duration=daily'
html = urlopen(url)

# BS accepts a lot of different data types, so you don't have to do e.g.
# urlopen(url).read(). It accepts file-like objects, so we'll just send in html
# as a parameter.
soup = BeautifulSoup(html)

# Loop over all <tr> elements with class 'ec_bg1_tr' or 'ec_bg2_tr'
for tr in soup.find_all('tr', {'class': re.compile('ec_bg[12]_tr')}):
# Find the event, currency and actual price by looking up <td> elements
# with class names.
event = tr.find('td', {'class': 'ec_td_event'}).text
currency = tr.find('td', {'class': 'ec_td_currency'}).text
actual = tr.find('td', {'class': 'ec_td_actual'}).text

# The returned strings which are returned are unicode, so to print them,
# we need to use a unicode string.
print u'{:3}\t{:6}\t{}'.format(currency, actual, event)

为了给您一些将来如何解决此类问题的提示,我记下了解决您的问题时使用的步骤。希望对您有所帮助。

  1. 我在 Chrome 中打开网页,右键单击并选择 Inspect Element .
  2. 找到 iframe通过查看元素选项卡中的信息,然后打开该 url。
  3. 也检查了这个页面,发现所有包含数据的元素都是 <tr>元素,并拥有类 ec_bg1_trec_bg2_tr .
  4. 我从早先遇到的 BS 知道它可以找到所有 trec_bg1_tr 的元素通过使用 soup.find_all('tr', {'class': 'ec_bg1_tr'}) .我最初的想法是首先遍历这些元素,然后遍历 ec_bg2_tr。元素。
  5. 然后我想也许 BS 足够聪明,可以接受正则表达式作为输入,所以我检查了他们的 docs ,这似乎不成问题。
  6. 按照文档中的方法,我尝试使用简单的正则表达式“ec_bg_[12]_tr”。
  7. 快跑!

关于python - 希望每天抓取网站并设置警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002712/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com