[過去ログ]
Pythonのお勉強 Part67 (1002レス)
Pythonのお勉強 Part67 http://mevius.5ch.net/test/read.cgi/tech/1653540315/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
265: デフォルトの名無しさん [sage] 2022/06/16(木) 00:20:30.34 ID:cYlpzbPX おま環でしょうか <div class="message">要素の有り無しに一貫性がないような・・? 要素がネストされているからかと思いきやそうでもなさそうだし なぜでしょうか import requests from bs4 import BeautifulSoup as _soup url="https://mevius.5ch.net/test/read.cgi/tech/1653540315/" bs=_soup(requests.get(url).text, "html.parser") posts=bs.select(".post") for post in posts: _print(post) http://mevius.5ch.net/test/read.cgi/tech/1653540315/265
267: デフォルトの名無しさん [sage] 2022/06/16(木) 01:29:33.24 ID:cYlpzbPX 5chの仕様なのですか? 例えば、 headersやipアドレスから5ch側が何かしらレスポンスに反映していたり スレのソースコードとhtml.parserの相性が悪いとかそういうことではなくて? bs4で意図した取得ができない5chの仕様とは具体的に何でしょうか >>266 あとそもそもですが、仮に自分が「これは5chの仕様だな」とわかっていたら 答えがわかっているので質問自体していないと思いますよ ちなみにソースコードを手動でコピペして成型して <div class="thread"><div class="post"></div>・・・・</div> の部分だけをbs4したら上手くいきました http://mevius.5ch.net/test/read.cgi/tech/1653540315/267
269: デフォルトの名無しさん [sage] 2022/06/16(木) 01:59:31.90 ID:cYlpzbPX >>268 普通に見えるとは、 エラーもなにも出ずに該当のレス分だけ再帰できた、ということではなく 該当レスすべてclass="message"のdiv要素も取得できた、ということですか? 自分の場合はprint(post) の結果が <div class="post"><div class="meta"></div></div>で終わっているものと <div class="post"><div class="meta"></div><div class="message"><span class="escaped"> のようにmessageまで取得できるものがあります こういう感じです https://i.imgur.com/9rhTBbp.jpg 改めて手動ソースコピペやってみましたがなぜかできませんでした (簡単なdomならば意図した通りに取得はできます) http://mevius.5ch.net/test/read.cgi/tech/1653540315/269
271: デフォルトの名無しさん [sage] 2022/06/16(木) 02:28:08.68 ID:cYlpzbPX >>270 自分のところではやはり消えてしまいます そして進展があり、最小構成で再現できました html=''' <div class="thread"> <div class="post"> <div class="meta"> <span class="name"><b>名前1</b>ワッチョイ<b></b></span> </div> <div class="message"> <span class="escaped">レス1</span> </div> </div> <div class="post"> <div class="meta"> <span class="name"><b><a href="mailto:sage">名前2</b>ワッチョイ<b></a></b></span> </div> <div class="message"> <span class="escaped">レス2</span> </div> </div> </div> '''#.replace('<b><a href="mailto:sage">',"<b>").replace("<b></a></b>","") おそらく<b><a href="mailto:sage">名前2</b>ワッチョイ<b></a></b>の部分 なぜかmailto:sageのときは<b></a></b>で挟み込んでいます(この部分を取り除いたらmessageのところが取得できました) .replace('<b><a href="mailto:sage">',"<b>").replace("<b></a></b>","")を切り替えるとmessage取得できました。 (同じようにreplaceしたres.textはなぜかできませんでしたが・・replace漏れがあっただけかもしれない) http://mevius.5ch.net/test/read.cgi/tech/1653540315/271
273: デフォルトの名無しさん [sage] 2022/06/16(木) 02:42:16.24 ID:cYlpzbPX .replace('<a href="mailto:sage">',"").replace('</a></b>','</b>') にしたらいけました。 >>272 >html5lib なるほど bs=_soup(res.text, "html5lib") いけました ありがとうございます! http://mevius.5ch.net/test/read.cgi/tech/1653540315/273
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.038s