0

私はこれに非常に慣れておらず、最初のセレクターについて頭を悩ませようとしています。誰か助けてくれませんか?このページからデータを抽出しようとしています:

http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc- -ghs-d1- -asdacom-dsk-_-hp#/shelf/1215337195041/1/so_false

div クラスの下のすべての情報 = 一覧 clearfix shelllisting ですが、書式設定の方法がわかりませんresponse.xpath()

なんとかスクレイピー コンソールを起動できましたが、何を入力しresponse.xpath()ても正しいノードを選択できないようです。私はそれが機能することを知っています

>>>response.xpath('//div[@class="container"]')

返事が来ました。それでも、リストの cleardix シェルフリストに移動する方法がわかりません。このビットを取得したら、スパイダーを介して引き続き作業できることを願っています.

PS このサイトをスキャンすることはできないのでしょうか? 所有者がスパイダーをブロックすることは可能ですか?

4

1 に答える 1

4

divwithlistingsクラス (および)内のコンテンツidは、XHR リクエストを介して非同期的にロードされます。つまり、Scrapy取得する html コードにはそれが含まれていません。

$ scrapy shell http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc--ghs-d1--asdacom-dsk-_-hp#/shelf/1215337195041/1/so_false
>>> response.xpath('//div[@id="listings"]')
[]

ブラウザの開発者ツールを使用すると、リクエストがhttp://groceries.asda.com/api/items/viewitemlist url に送信され、多数の GET パラメータが指定されていることがわかります。

1 つのオプションは、そのリクエストをシミュレートし、結果の JSON を解析することです。

ここに画像の説明を入力

それを行う方法は、実際には別の質問の一部です。


seleniumパッケージを使用した解決策の 1 つを次に示します。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc--ghs-d1--asdacom-dsk-_-hp#/shelf/1215337195041/1/so_false')

div = driver.find_element_by_id('listings')
for item in driver.find_elements_by_xpath('//div[@id="listings"]//a[@title]'):
    print item.text.strip()

driver.close()

版画:

Kellogg's Coco Pops
Kelloggs Rice Krispies
Kellogg's Coco Pops Croco Copters
...
于 2014-08-25T00:02:56.233 に答える