我正在做一个网络抓取程序,它每5分钟刮一次信息表,就这样。它在over上打印相同的表,但我要做的是比较它的第一次运行和名称‘num1 1’,并将其与下次运行时进行比较,以查看表是否发生了任何更新。我们可以将这个标记为‘num2 2’,我想我需要在终端中标注第一个输出,并将其与第二次比较等等,并执行如下操作:
if num1 != num2:
print("updated") 但我需要把“num2”和“num3”等.以下是我到目前为止所拥有的:
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())发布于 2017-12-05 18:39:46
定期比较刮取结果
如果您希望使用类似于cron的内容定期执行脚本,那么您可以做的是将刮取的结果保存到文本文件中,然后在下一次执行中简单地加载文本文件以比较更改。
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’,因为您正在将字节写入文件,而不是字符串。
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存储库中所没有的。
https://stackoverflow.com/questions/47659839
复制相似问题