とあるウェブ記事が更新されているかどうかを確認できるものをPythonで作っています。 あるサイトからBeautifulSoupを用いて記事のテキストを抽出し、それを新規ファイル(newfile.txt)に書き込みました。ファイルに書いてあるテキスト内容をリストに格納し、前回抽出した記事の内容(benzai.txtに書き込んである)と比較して同じであるか違うものなのかをIf文で判別するものです。 ここに質問の内容を詳しく書いてください。 前回作成したリスト型と比較しているのですが記事の内容が同じものでも == を利用して比較してみるとFakseと出力されてしまいますが、何が問題なのか調べてみても考えてみても分かりません。お力添えをお願いします。 ### 発生している問題・エラーメッセージ なし
エラーメッセージ
### 該当のソースコード mport requests from bs4 import BeautifulSoup import difflib as diff import os newfile_list = 'a' benzai_list = 'a' def readlines_newfile(): fd_newfile = open('newfile.txt','r') data_newfile = fd_newfile.readlines() newfile_list = data_newfile fd_newfile.close() print(data_newfile) def readlines_benzai(): fd_benzai = open('benzai.txt', 'r') data_benzai = fd_benzai.readlines() benzai_list = data_benzai fd_benzai.close() print(data_benzai) r1 = requests.get("https://venzaiten.com/category/%e6%97%a5%e7%b5%8c225%e5%85%88%e7%89%a9/livetrade") soup1 = BeautifulSoup(r1.text, "html.parser") soup2 = soup1.find("li","post_type1 post_num1 clearfix" ) soup3 = soup2.find("h4", "title") soup4 = soup3.find("a") link = soup4.get("href") r2 = requests.get(link) soupFinal = BeautifulSoup(r2.text, "html.parser") soupRealTradeCollum = soupFinal.find("div", "post_content clearfix").text InspectionFile = open("newfile.txt", "w+") InspectionFile.write(soupRealTradeCollum) InspectionFile.close() Entry = open("entry.txt", "w+") readlines_newfile() readlines_benzai() print(benzai_list) print(newfile_list) print(benzai_list == newfile_list) print(len(benzai_list)) print(len(newfile_list)) ```ここに言語名を入力 Pyrhon3
試したこと
最後のコード print(benzai_list == newfile_list) にて、
print(list(benzai_list) == list(newfile_list))
ともやってみましたが結果は同じでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
提示コードだと「newfile_list」も「benzai_list 」も「'a'」のままで結果はTrueになります。
実際のコードと提示のコードに相違があるようなので確認ください。
> 同じ内容のリストでもFalseと出てしまう
発想が逆です。
Falseとなるということは異なるわけで、「どこが異なるか?」を調べましょう。
Can110さん
提示コードを編集しました。確かにあのコードでは両方のリストがaとなってしまいますね。
otnさんも指摘されていますが、まずは「print(len(????_list))」行数が同じか確認し
同じなら「print(????_list)」して中身が同じか目視確認してみてください。
otnさん
両リストをPrint関数で出力しても全く同じ内容です。違いが見つからないのですが、これ以外の違いはどんなものがあげられるでしょうか?
len関数で出力してみました。片方が6で片方が5でした。しかし、目視確認ではどちらも全く同じ内容です。
その程度のサイズでしたら質問本文におさまりそうなので
print(????_list)した2つの結果をコードブロックで囲んで提示ください。
> 両リストをPrint関数で出力しても
それは、「文字列化すると等しい」に過ぎません。
要素を1つずつ比較しましょう。
otn110
実はリストの長さはとんでもないものです。
ですので、コードを編集なしでそのまま上げました。こちらを実行して見れば同じ出力が得られますのでそちらの方がリストを簡単に閲覧できるかと思います。
残念ながら「FileNotFoundError: [Errno 2] No such file or directory: 'benzai.txt'」にて実行できません。
いずれにせよリストの要素数が5と6で異なっている時点で、同じではありません。
> 同じ出力が得られます
それは、「文字列化すると等しい」に過ぎませんと、書いたのですが、意味分かりませんでしょうか?
Falseとなるということは異なるわけで、「どこが異なるか?」を調べましょう。
ご指摘で気づいたのですが、実はbenzai.txtに関しては手動で一度ファイルを作成しそこに手で記事の内容をコピペして作成していました。ですのでそうしないと同じ出力が得られません。上記コードで実行してみたところ、
リスト[??????]
リスト[??????]
a
a
True
1
1
と出てきました。今度はリストにきちんとファイルの記事のテキストを格納できてないみたいです。
回答1件
あなたの回答
tips
プレビュー