ScrapyのSitemapSpiderを使用してShopifyストアのリストを表示します。私はすべての製品をそれぞれのコレクションからXPathで取得しています。通常、これはやるのが難しくありません。しかし、コレクションページのhtmlはいくつかの点でサイトごとに異なります。私のタグ(複数可)のdiv祖先の XPathとScrapy - タグの深さと数量が矛盾している場合のリンクの掻き取り
- :私は私がやろうとしている正確に理解するために必要ないくつかのポイントをまとめてみます矛盾しています
- div要素内のタグの深さは矛盾しています
- div要素内にhrefを含むタグが1つまたは2つあります。サイトごとに異なります。 2が存在する場合、それらはdiv要素のクラス名
- 同じになります矛盾しているので、私はシンプル
のためにそれらを削除しましたので、私の所望の生成物へのリンクを含んだコードが内に複数のタグを持つことができますこのような矛盾した深さでdiv要素:
<!-- Product One -->
<div>
<div>
<div>
<a href="/product_1">
</a>
</div>
<a href="/product_1">
</a>
</div>
</div>
<!-- Product Two -->
<div>
<div>
<div>
<a href="/product_2">
</a>
</div>
<a href="/product_2">
</a>
</div>
</div>
<!-- Product Three-->
<div>
<div>
<div>
<a href="/product_3">
</a>
</div>
<a href="/product_3">
</a>
</div>
</div>
それともジ内部タグの1つを有する、スペクトルの完全な反対側の端部にあることができますVこのようなものの深さにある要素:
<div>
<a href="/product_1">
</a>
</div>
<div>
<a href="/product_2">
</a>
</div>
<div>
<a href="/product_3">
</a>
</div>
は、だから私はからのみのhrefを抽出し、私はキーワード「製品」を含むタグを持っている非常に最初のdiv要素を選択することになる考え出しdiv要素の最初のタグ。
<div> <!-- I want to select this div element -->
<div>
<div>
<a href="/product_1">
</a>
</div>
<a href="/product_1">
</a>
</div>
</div>
私が持っているコードは、今のようになります。
product_links = response.xpath('//div//a[contains(@href, "product")][1]/@href').extract()
私はまだそう明らかに私はそれが欲しいものをやっていないのに重複した値を受信しています。
誰もが実際にそれをすべて読んだら、絶対に助けてください!
'product_3' 「コレクション」はどこから来たのですか? –
少なくとも1つの内部divに '/ product_'を含むリンクが含まれている限り、最も外側のdivが必要ですか? –
@BillBell申し訳ありませんが、私はそれを私がそこに残していることに気づいていませんでした。コレクションページから製品リンクを拝借しているので、リンクは/ collections/collection-name/products/product-nameという形式になります。私はそれを使って私が望ましくないリンクを得ていないことを確認しました。私は今混乱を避けるためにそれを削除しました。 – barnesc