1

多くのページから多くの URL をスクレイピングする必要があるプロジェクトがあります。すべてのページの構造は同じままだと思っていましたが、コードが変更されて壊れることがあります。

たとえば、記事の要約とそのキーワードを抽出する必要がありますが、どちらも<p>同じクラスの別のもの"marginB3"です。そのため、ページをスクレイピングしたところ、アブストラクト用とキーワード用の 2 つの結果しか得られませんでした。

hxs = HtmlXPathSelector(response)
lista =  hxs.select('//p[@class="marginB3"]/text()')  
self.abstracto = lista[0].extract()
self.keywords = lista[1].extract()

<p>次に、3 番目のページを試してみると、記事に関する追加情報を含む新しいページが表示され、構造が変更されました。ID がなく、クラスしかないため、これはさらに複雑になりました。<p>それらの上に独自のものがある場合、IDのないキーワードのどれがどれであるかを区別するにはどうすればよいですか<h2>:

<h2>Info</h2>
<p class="marginB3">a_url_I_want</p>

<h2>それを読んでからその下を読むことで、この差別化を行うことができます<p>か?

4

2 に答える 2

0

私は XPATH の専門家ではありませんが、タグfollowingの後のアイテムをキャッチするには、軸を確認する必要があると思います。<h2>

一般に、解析しようとしているドキュメントが適切にマークされていない場合、XPATH はうまく機能しません。さらに複雑になる危険を冒して、一貫性のないマークアップに対処するためのより手続き的な方法を可能にするBeautifulSoupモジュールのようなものを見ることができます。XPATH は (ほとんどの場合) 宣言型言語であり、宣言型言語は非正規の入力に対処するのに苦労します。

于 2012-08-22T02:38:45.367 に答える
0

確かにできます。

これを試して:

# First <p>
hxs.select('//h2/following-sibling::p[@class="marginB3"][1]/text()').extract()
# Second <p>
hxs.select('//h2/following-sibling::p[@class="marginB3"][2]/text()').extract()
于 2012-08-23T08:25:12.810 に答える