[過去ログ] Pythonのお勉強 Part67 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
265: デフォルトの名無しさん [sage] 2022/06/16(木) 00:20:30.34 ID:cYlpzbPX(1/5) AAS
おま環でしょうか
<div class="message">要素の有り無しに一貫性がないような・・?
要素がネストされているからかと思いきやそうでもなさそうだし
なぜでしょうか
import requests
from bs4 import BeautifulSoup as _soup
url="2chスレ:tech
bs=_soup(requests.get(url).text, "html.parser")
posts=bs.select(".post")
for post in posts:
_print(post)
267: デフォルトの名無しさん [sage] 2022/06/16(木) 01:29:33.24 ID:cYlpzbPX(2/5) AAS
5chの仕様なのですか?
例えば、
headersやipアドレスから5ch側が何かしらレスポンスに反映していたり
スレのソースコードとhtml.parserの相性が悪いとかそういうことではなくて?
bs4で意図した取得ができない5chの仕様とは具体的に何でしょうか >>266
あとそもそもですが、仮に自分が「これは5chの仕様だな」とわかっていたら
答えがわかっているので質問自体していないと思いますよ
ちなみにソースコードを手動でコピペして成型して
<div class="thread"><div class="post"></div>・・・・</div>
の部分だけをbs4したら上手くいきました
269: デフォルトの名無しさん [sage] 2022/06/16(木) 01:59:31.90 ID:cYlpzbPX(3/5) AAS
>>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まで取得できるものがあります
こういう感じです
画像リンク
改めて手動ソースコピペやってみましたがなぜかできませんでした
(簡単なdomならば意図した通りに取得はできます)
271: デフォルトの名無しさん [sage] 2022/06/16(木) 02:28:08.68 ID:cYlpzbPX(4/5) AAS
>>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漏れがあっただけかもしれない)
273: デフォルトの名無しさん [sage] 2022/06/16(木) 02:42:16.24 ID:cYlpzbPX(5/5) AAS
.replace('<a href="mailto:sage">',"").replace('</a></b>','</b>')
にしたらいけました。
>>272>html5lib
なるほど
bs=_soup(res.text, "html5lib")
いけました
ありがとうございます!
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.358s*