私はこれで本当に頑張っています。フォーラムスレッドのスクレイピング:どのようにCSSのマージン属性からフォローアップ関係を計算するのですか?
私の掻き出しジョブの対象サイトは古いスタイルのフォーラムで、各スレッドは<div>
タグ内にあり、各投稿は<p>
タグ内にあります。フォローアップポストには、左マージンが20pxインデントされてその関係が示されます。
<div>
<p style="margin:2px 0 17px 0px; width:705px"><a href="./6368972.html" class="post">original post</a>other stuff</p>
<p style="margin:2px 0 2px 20px; width:683px"><a href="./6368973.html" class="post">reply post</a>other stuff</p>
<p style="margin:2px 0 2px 40px; width:661px"><a href="./6368974.html" class="post">reply post</a>other stuff</p>
...
</div>
私は効果的なアルゴリズムのためにあなたの助けを必要とし、フォローアップの関係、除くタイトル、日時、ニックネームなど、など、ここで多くのINFOMATIONを抽出することができています。基本的に私は、その投稿が以前の投稿に対する返信であることを知る必要があります。
私のアイテムには、フォローアップ関係のフィールドが含まれています。すなわち、 reply_to = scrapy.Field()
ここにreply_to投稿のURLを格納する必要があります。
Iは、各ポストのための左マージンの値を抽出することができ:(スレッドであり、すなわち、どのように多くの総ポスト)私はDIVの長さを計算することができる margin = int(div.css('p::attr(style)').re('.* (\d+)px;.*'))
。
しかし、実際に、私はここから行くかもしれない方法が分からない...
はあなたのすべてをありがとう!あなたは、いくつかの正規表現にスタイル属性を一致させるためにre:test
XPath式を使用することができます
1--------------------- # left margin = 0px; original post
2 ------------------- # left margin = 20px; reply to post 1
3 ----------------- # left margin = 40px; reply to post 2
4 ------------------- # left margin = 20px; reply to post 1, not 3
5 ----------------- # left margin = 40px; reply to post 4, not 2
6 --------------- # left margin = 60px; reply to post 5
正確に何をしたいのかはっきりしません。提供された 'HTML'ソースについての希望出力を共有できますか? – Andersson