0
私は治療にいくつか問題があります。私がコマンドscrapy crawl album -o test.xml
を実行すると、スパイダーはうまく動作します。スクリプトからクロールすると、私はと違うstart_urls
をスパイダーに与えますが、と同じはのコマンドと同じになります。両方のURLが利用可能です。ここに私が書いたコードがあります。私が間違っていることを指摘してください、ありがとう。scrapyのクロールはコマンドではうまくいきますが、スクリプトから実行すると何か心配があります
スパイダーファイルxiami_scrapy.py
import scrapy
empty_referer = {
'Referer': ''
}
class AlbumSpider(scrapy.Spider):
name = 'album'
start_urls = [
'http://www.xiami.com/artist/album-eJlX61793',
]
artist = 'giga'
def __init__(self, url=None, artist=None, *args, **kwargs):
super(AlbumSpider, self).__init__(*args, **kwargs)
if artist is not None:
self.artist = artist
if url is not None:
self.start_urls = [url]
def parse(self, response):
for album in response.css('.album_item100_thread'):
yield {
'artist': self.artist,
'title': album.css('.name>a>strong::text').extract_first(),
'fav_count': album.css('.fav_c_ico::text').extract_first(),
'star_rating': album.css('.album_rank>em::text').extract_first(),
'release_date': response.css('.company>a::text')[1].extract().strip(),
'company': album.css('.company>a::text')[0].extract(),
'url': album.css('.name>a::attr(href)').extract_first(),
}
next_page = response.css('.p_redirect_l::attr(href)').extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, headers=empty_referer, callback=self.parse)
スクリプトあなたはクモのコンストラクタでstart_urls
の値を設定している場合、あなたはself.start_urls
としてそれを参照してくださいtest.py
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from xiamiscrapy.spiders.xiami_scrapy import AlbumSpider
from scrapy.utils.log import configure_logging
configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
runner = CrawlerRunner()
@defer.inlineCallbacks
def crawl():
spider = AlbumSpider(url='http://www.xiami.com/artist/album-bzMAng64c0a',artist='reol')
yield runner.crawl(spider)
reactor.stop()
crawl()
reactor.run()