6

この Web サイトをクロールしようとしています: http://www.aido.com/eshop/cl_2-c_189-p_185/stationery/pens.html

このページのすべての製品を取得できますが、ページの下部にある [もっと見る] リンクのリクエストを発行するにはどうすればよいですか?

今までの私のコードは次のとおりです。

rules = (
    Rule(SgmlLinkExtractor(restrict_xpaths='//li[@class="normalLeft"]/div/a',unique=True)),
    Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="topParentChilds"]/div/div[@class="clm2"]/a',unique=True)),
    Rule(SgmlLinkExtractor(restrict_xpaths='//p[@class="proHead"]/a',unique=True)),
    Rule(SgmlLinkExtractor(allow=('http://[^/]+/[^/]+/[^/]+/[^/]+$', ), deny=('/about-us/about-us/contact-us', './music.html',  ) ,unique=True),callback='parse_item'),
)

何か助けはありますか?

4

1 に答える 1

11

まず、動的にロードされた ajax コンテンツのスクレイピングに対処する方法について、このスレッドを参照してください: AJAX を使用している Web サイトから動的コンテンツをスクレイピングするために、スクレイピーを使用できますか?

したがって、「View More」ボタンをクリックすると、XHR リクエストが起動されます。

http://www.aido.com/eshop/faces/tiles/category.jsp?q=&categoryID=189&catalogueID=2&parentCategoryID=185&viewType=grid&bnm=&atmSize=&format=&gender=&ageRange=&actor=&director=&author=&region=&compProductType=&compOperatingSystem=&compScreenSize=&compCpuSpeed=&compRam=&compGraphicProcessor=&compDedicatedGraphicMemory=&mobProductType=&mobOperatingSystem=&mobCameraMegapixels=&mobScreenSize=&mobProcessor=&mobRam=&mobInternalStorage=&elecProductType=&elecFeature=&elecPlaybackFormat=&elecOutput=&elecPlatform=&elecMegaPixels=&elecOpticalZoom=&elecCapacity=&elecDisplaySize=&narrowage=&color=&prc=&k1=&k2=&k3=&k4=&k5=&k6=&k7=&k8=&k9=&k10=&k11=&k12=&startPrize=&endPrize=&newArrival=&entityType=&entityId=&brandId=&brandCmsFlag=&boutiqueID=&nmt=&disc=&rat=&cts=empty&isBoutiqueSoldOut=undefined&sort=12&isAjax=true&hstart=24&targetDIV=searchResultDisplay

text/html次の 24 項目を返します。このhstart=24パラメーターに注意してください。最初に [もっと見る] をクリックすると 24 になり、2 回目は 48 になります。これはあなたの命の恩人です。

ここで、スパイダーでこれらのリクエストをシミュレートする必要があります。これを行うための推奨される方法は、データを抽出するコールバックを提供する Scrapy のRequestオブジェクトをインスタンス化することです。

それが役立つことを願っています。

于 2013-04-21T17:01:49.650 に答える