首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使整个程序在第一次运行时成为一个变量,第二次使另一个变量成为变量,并将两者进行比较?

如何使整个程序在第一次运行时成为一个变量,第二次使另一个变量成为变量,并将两者进行比较?
EN

Stack Overflow用户
提问于 2017-12-05 17:58:14
回答 1查看 48关注 0票数 0

我正在做一个网络抓取程序,它每5分钟刮一次信息表,就这样。它在over上打印相同的表,但我要做的是比较它的第一次运行和名称‘num1 1’,并将其与下次运行时进行比较,以查看表是否发生了任何更新。我们可以将这个标记为‘num2 2’,我想我需要在终端中标注第一个输出,并将其与第二次比较等等,并执行如下操作:

代码语言:javascript
复制
if num1 != num2:
    print("updated") 

但我需要把“num2”和“num3”等.以下是我到目前为止所拥有的:

代码语言:javascript
复制
import urllib
import urllib.request as request
import libxml2

totalurl = "https://www.icc-ccs.org/index.php/piracy-reporting-centre/live-piracy-report"
htmlfile = urllib.request.urlopen(totalurl)
htmltext = htmlfile.read()
source = html.fromstring(htmltext.decode())
num = source.xpath('//div[@class="fabrikDataContainer"]')
print(num[0].text_content())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-05 18:39:46

定期比较刮取结果

如果您希望使用类似于cron的内容定期执行脚本,那么您可以做的是将刮取的结果保存到文本文件中,然后在下一次执行中简单地加载文本文件以比较更改。

代码语言:javascript
复制
import urllib
import urllib.request as request
import libxml2

totalurl = "https://www.icc-ccs.org/index.php/piracy-reporting-centre/live-piracy-report"
htmlfile = urllib.request.urlopen(totalurl)
htmltext = htmlfile.read()
source = html.fromstring(htmltext.decode())
num = source.xpath('//div[@class="fabrikDataContainer"]')
print(num[0].text_content())
with open('lastresult.txt', 'r+') as f:
    last_content = f.read()
    if num[0].text_content() != last_content:
        print("updated")
    # update last result file
    f.seek(0)
    f.write(num[0].text_content())
    f.truncate()

解决编码问题

新内容和最后内容之间的比较总是返回true的原因似乎与编码有关,因为在执行比较和保存文件之前对字符串进行编码。正确的文件打开模式是‘rb+’和‘wb’,因为您正在将字节写入文件,而不是字符串。

代码语言:javascript
复制
import os
import urllib
import urllib.request as request
#import libxml2
from lxml import html

totalurl = "https://www.icc-ccs.org/index.php/piracy-reporting-centre/live-piracy-report"
htmlfile = urllib.request.urlopen(totalurl)
htmltext = htmlfile.read()
source = html.fromstring(htmltext.decode())
num = source.xpath('//div[@class="fabrikDataContainer"]')
new_content = str.encode(num[0].text_content(), 'utf8')
# print(new_content.decode('utf8'))
if os.path.exists('lastresult.txt'):
    with open('lastresult.txt', 'rb+') as f:
        last_content = f.read()
        if new_content != last_content:
            print("updated")
        f.seek(0)
        f.write(new_content)
        f.truncate()
else:
    with open('lastresult.txt', 'wb') as f:
        f.write(new_content)

注意:我切换到lxml,因此不必安装libxml2 for python3,这是标准Ubuntu16.04存储库中所没有的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47659839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档