他の人が同様のトピックを扱っていることは認識していますが、これらの投稿を読んでも、まだ問題を解決できません。
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
各結果ページの最初の投稿の名前を取得できるように、誰かが私のルールをまっすぐに設定できますか?
ありがとう!