pythonを使ってbeautifulsoupで取得した情報を比較したいと考えています。
例えば前日と当日の差分を取るなど。
まずスクレイピングした結果を丸ごとCSVに放り込んで保存しています。
f = open(filename, 'a',) CsvWriter = csv.writer(f) site=requests.get(URL,timeout=10,verify=False) soup=BeautifulSoup(site.content,'html.parser') CsvWriter.writerow([URL,soup]) f.close()
上で作った2つのcsvを比較します。
例えば次の2ファイルとした時
- /files/20190203.csv
- /files/20190204.csv
#!/usr/bin/env python # -*- coding: utf-8 -*- import difflib import sys import csv csv.field_size_limit(sys.maxsize) new_filepath = '/files/20190204.csv' old_filepath = '/files/20190203.csv' old_data = open(old_filepath, 'r',) old_reader = csv.reader(line.replace('\0','') for line in old_data) new_data = open(new_filepath, 'r',) new_reader = csv.reader(line.replace('\0','') for line in new_data) old_d=list() for row1 in old_reader: old_d.append(row1) new_d=list() for row2 in new_reader: new_d.append(row2) for i in range(0,d): if new_d[i][1] == old_d[i][1]: print("昨日と同じ") else: print("昨日と違う") print(new_d[i][0]) #異なるURLのみ表示
以上は上手く動いて変更のあったURLのみ表示することができます。
しかし以下のように「変化のあった場所」をdiff取ろうとしましたが上手くいきません。
dd = difflib.ndiff(new_d[i][1], old_d[i][1]) for buf in dd: print(buf)
結果としては、1文字ずつ比較されるようなOUTPUTになってしまいます。
色々試してみたのですが、difflibの使い方がよくないのかもしれません。
差分のある行のみ表示することはできないでしょうか?
実行結果の一部抜粋です。。
- < - / - s - p - a - n - > - - < - / - l - i - > - < - l - i - > - - < - a - - h - r - e - f - = - " - h - t - t - p - : - / - / - e - c - . - s - h - o - p - . - m - a - . - c - o - . - j - p - / - s - h - o - p - d - e - t - a - i - l - /

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/05 12:47