私はScrapyで新しいです。私は数千のURL、xpathタプル、値をデータベースに持っています。 これらのURLは異なるドメインからのものです(必ずしも同じドメインから100個のURLが存在する可能性があります)。広いクロール - 異なるxpaths - Scrapy
x.com/a //h1
y.com/a //div[@class='1']
z.com/a //div[@href='...']
x.com/b //h1
x.com/c //h1
...
これらの値は、できるだけ早く2時間ごとに取得したいが、これらの値はどれもオーバーロードしないようにしたい。
これを行う方法を理解できません。
私の考え:
私はすべての異なるドメインに1つのスパイダーを作成することができますが、それはルールを解析し、一度にそれらを実行しています設定しました。
いいですか?
EDIT: 並行処理によってデータをデータベースに出力する方法がわかりません。
EDIT2:
私はこのような何かを行うことができます - すべてのドメインに対して新しいクモがあります。しかし、これは数千の異なるURLを持つことは不可能であり、それはxpathsです。
class WikiScraper(scrapy.Spider):
name = "wiki_headers"
def start_requests(self):
urls = [
'https://en.wikipedia.org/wiki/Spider',
'https://en.wikipedia.org/wiki/Data_scraping',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
hxs = HtmlXPathSelector(response)
header = hxs.select('//h1/text()').extract()
print header
filename = 'result.txt'
with open(filename, 'a') as f:
f.write(header[0])
self.log('Saved file %s' % filename)
class CraigslistScraper(scrapy.Spider):
name = "craigslist_headers"
def start_requests(self):
urls = [
'https://columbusga.craigslist.org/act/6062657418.html',
'https://columbusga.craigslist.org/acc/6060297390.html',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
hxs = HtmlXPathSelector(response)
header = hxs.select('//span[@id="titletextonly"]/text()').extract()
filename = 'result.txt'
with open(filename, 'a') as f:
f.write(header[0])
self.log('Saved file %s' % filename)
はい、しかし、異なるドメインを持つすべてのURLは、データを取得するために異なるxpathを持っています。 –
mmmmドメインごとに構成可能なxpathを使用することに問題はないので、あなたが考えているスパイダーコードを共有する方が良いと思います。 – eLRuLL
質問の最後にコードを追加しました。私はScrapyで非常に新しいです。実際、私は今はマルチスレッドとlxmlを使用していますが、スロットルやその他の利点のために、Scrapyを使用したいと考えています。 –