1

私はスクレイピーに非常に慣れておらず、以前は正規表現を使用したこともありませんでした

以下は私のspider.pyコードです

class ExampleSpider(BaseSpider):
   name = "test_code
   allowed_domains = ["www.example.com"]
   start_urls = [
       "http://www.example.com/bookstore/new/1?filter=bookstore",
       "http://www.example.com/bookstore/new/2?filter=bookstore",
       "http://www.example.com/bookstore/new/3?filter=bookstore",
   ]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)

ここstart_urlsで、整数値が異なることを除いて 3 つの URL がすべて同じである2?, 3?ことを確認すると、サイトに存在する URL に応じて無制限であることを意味します。

    from scrapy.contrib.spiders import CrawlSpider, Rule
    from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
    import re

    class ExampleSpider(CrawlSpider):
        name = 'example.com'
        allowed_domains = ['example.com']
        start_urls = [
       "http://www.example.com/bookstore/new/1?filter=bookstore",
       "http://www.example.com/bookstore/new/2?filter=bookstore",
       "http://www.example.com/bookstore/new/3?filter=bookstore",
   ]

        rules = (
            Rule(SgmlLinkExtractor(allow=(........),))),
        ) 

   def parse(self, response):
       hxs = HtmlXPathSelector(response)

上記のリストのクロール スパイダー ルールを作成する方法を教えてくださいstart_url

4

2 に答える 2

4

私があなたを正しく理解しているなら、あなたは特定のパターンでたくさんの開始URLが欲しいです。

その場合、BaseSpider.start_requestsメソッドをオーバーライドできます。

class ExampleSpider(BaseSpider):
    name = "test_code"
    allowed_domains = ["www.example.com"]

    def start_requests(self):
        for i in xrange(1000):
            yield self.make_requests_from_url("http://www.example.com/bookstore/new/%d?filter=bookstore" % i)

    ...
于 2012-05-24T18:02:02.297 に答える
0

CrawlSpiderを使用している場合、通常、parseメソッドをオーバーライドすることはお勧めできません。

ルールオブジェクトは、関心のあるURLを気にしないURLにフィルタリングできます。

参考のために、ドキュメントのCrawlSpiderを参照してください。

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
import re

class ExampleSpider(CrawlSpider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/bookstore']

    rules = (
        Rule(SgmlLinkExtractor(allow=('\/new\/[0-9]\?',)), callback='parse_bookstore'),
    )

def parse_boostore(self, response):
   hxs = HtmlXPathSelector(response)
于 2012-05-24T17:27:14.713 に答える