0

他の人が同様のトピックを扱っていることは認識していますが、これらの投稿を読んでも、まだ問題を解決できません。

Scrapy を使用して、検索結果ページをスクレイピングするクロール スパイダーを作成しています。1 つの例として、CraigsList.org のベイエリアにあるすべての 1 ベッドルーム アパートメントの結果が挙げられます。それらはここにあります:

http://sfbay.craigslist.org/search/apa?zoomToPosting=&query=&srchType=A&minAsk=&maxAsk=&bedrooms=1

これは、ベイエリアの最初の 100 の 1 ベッドルーム アパートメントを示しています。201~300番マンションはこちらのページに

http://sfbay.craigslist.org/search/apa?bedrooms=1&srchType=A&s=100

そして、次の 100 では、「&s=100」が「&s=200」などに変更されます。これらの各ページの最初の投稿の名前と結果が必要だとしましょう。あまり意味がないことはわかっていますが、簡単な例を示すだけです。

私の問題は、「&s=100」が「&s=200」などにインクリメントされるようにルールを記述する方法です。これは私が持っているものです:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item, Field

class Torrent(Item):
    name = Field()

class MySpiderSpider(CrawlSpider):

    name = 'MySpider'
    allowed_domains = ['http://sfbay.craigslist.org']
    start_urls = ['http://sfbay.craigslist.org/search/apa?zoomToPosting=&query=&srchType=A&minAsk=&maxAsk=&bedrooms=1']
    rules = [Rule(SgmlLinkExtractor(allow=[r'&s=\d+']), 'parse_torrent', follow=True)]

    def parse_torrent(self, response):
        x = HtmlXPathSelector(response)
        torrent = Torrent()
        torrent['name'] = x.select("id('toc_rows')/p[2]/span[1]/a/text()").extract()
        return torrent

各結果ページの最初の投稿の名前を取得できるように、誰かが私のルールをまっすぐに設定できますか?

ありがとう!

4

1 に答える 1