我在尝试抓住这个URL时面临一个奇怪的问题:
为了执行抓取,我设计了这个:
class IkeaSpider(CrawlSpider) :
name = "Ikea"
allower_domains = ["http://www.ikea.com/"]
start_urls = ["http://www.ikea.com/fr/fr/catalog/productsaz/8/"]
rules = (
Rule(SgmlLinkExtractor(allow=[r'.*/catalog/products/\d+']),
callback='parse_page',
follow=True),
)
logging.basicConfig(filename='example.log',level=logging.ERROR)
def parse_page(self, response):
for sel in response.xpath('//div[@class="rightContent"]'):
Blah blah blah
我从命令行启动蜘蛛,我可以看到网址通常被抓,但是,对于其中一些,回调不起作用(其中大约一半通常被废弃)。
由于此页面上有超过150个链接,因此可以解释为什么爬虫缺少回调(太多工作)。你们有些人对此有任何想法吗?
这是日志:
2015-12-25 09:02:55 [scrapy]信息:存储的csv feed(107项)in:test.csv 2015-12-25 09:02:55 [scrapy] INFO:倾倒Scrapy统计: ' downloader / request_bytes':68554, ' downloader / request_count':217, ' downloader / request_method_count / GET':217, ' downloader / response_bytes':4577452, ' downloader / response_count':217, ' downloader / response_status_count / 200':216, ' downloader / response_status_count / 404':1, ' dupefilter / filtered':107, ' file_count':106, ' file_status_count /已下载':106, ' finish_reason':'已完成', ' finish_time':datetime.datetime(2015,12,25,8,2,55,548350), ' item_scraped_count':107, ' log_count / DEBUG':433, ' log_count / ERROR':2, ' log_count / INFO':8, ' log_count /警告':1, ' request_depth_max':2, ' response_received_count':217, ' scheduler / dequeued':110, ' scheduler / dequeued / memory':110, ' scheduler / enqueued':110, ' scheduler / enqueued / memory':110, ' start_time&#39 ;: datetime.datetime(2015,12,25,8,2,28,656959) 2015-12-25 09:02:55 [scrapy]信息:蜘蛛关闭(完成
答案 0 :(得分:0)
我已经阅读了很多关于我的问题的内容,显然,CrawlSpider
类不够具体。它可能解释了为什么它错过了一些链接,由于某些原因我无法解释。
基本上,建议使用BaseSpider
类start_requests
和make_requests_from_url
方法以更具体的方式完成工作。
我仍然不完全确定如何准确地做到这一点。这只是一个提示。
答案 1 :(得分:0)
我不喜欢这些自动蜘蛛课程。我通常只是完全按照自己的需要建造。
import scrapy
class IkeaSpider(scrapy.Spider) :
name = "Ikea"
allower_domains = ["http://www.ikea.com/"]
start_urls = ["https://www.ikea.com/fr/fr/cat/produits-products/"]
logging.basicConfig(filename='example.log',level=logging.ERROR)
def parse(self, response):
# You could also use a.vn-nav__link::attr(href) selector.
for link in response.css('a:contains("/fr/cat/")::attr(href)').getall()
yield scrapy.Request(link, callback=self.parse_category)
def parse_category(self, response):
# parse items or potential sub categories