我是的新手,写了一个简单的脚本来从我学校的bbs上抓取帖子。但是,当我的蜘蛛运行时,它会收到如下错误消息:
015-03-28 11:16:52+0800 nju_spider调试:重试http://bbs.nju.edu.cn/bbstcon?board=WarAndPeace&file=M.1427299332.A> (失败2次):> 2015-03-28 11:16:52+0800 nju_spider调试:放弃重试http://bbs.nju.edu.cn/bbstcon?board=WarAndPeace&file=M.1427281812.A> (失败3次):> 2015-03-28 11:16:52+0800 nju_spider错误:错误下载http://bbs.nju.edu.cn/bbstcon?board=WarAndPeace&file=M.1427281812.A>:> 下载/请求_字节: 36236,‘下载程序/请求_计数’:113,‘下载程序/请求方法_ 11:16:56+0800 _ nju_spider’:113,‘下载程序/响应_字节’:31135,“下载程序/响应_计数”:14,“下载程序/响应状态_计数/200”:14,“dupefilter/filtered”:25,“finish_理由”:“finish”,“finish_time”:datetime.datetime(2015年,3,28,3,16,56,677065),“item_scraped_count”:11,'log_count/DEBUG':127,'log_count/ERROR':32,“日志_count/INFO”:8,“请求深度_max”:3,“响应_接收的计数”:14,“调度器/脱队列”:113,“调度器/退出队列/内存”:113,“调度器/排队/内存”:113,“调度器/已排队/内存”:113,“start_time”:datetime.datetime(2015年,3,28,3,16,41,(874807)) 2015-03-28 11:16:56+0800 nju_spider信息:蜘蛛关闭(完成)
看起来蜘蛛尝试了url,但是失败了,但是这个url确实存在。在bbs中有上千个帖子,但是每次我运行我的蜘蛛,它只能随机得到其中的几个。我的代码如下所示,非常感谢您的帮助
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from ScrapyTest.items import NjuPostItem
class NjuSpider(CrawlSpider):
name = 'nju_spider'
allowed_domains = ['bbs.nju.edu.cn']
start_urls = ['http://bbs.nju.edu.cn/bbstdoc?board=WarAndPeace']
rules = [Rule(LinkExtractor(allow=['bbstcon\?board=WarAndPeace&file=M\.\d+\.A']),
callback='parse_post'),
Rule(LinkExtractor(allow=['bbstdoc\?board=WarAndPeace&start=\d+']),
follow=True)]
def parse_post(self, response):
# self.log('A response from %s just arrived!' % response.url)
post = NjuPostItem()
post['url'] = response.url
post['title'] = 'to_do'
post['content'] = 'to_do'
return post发布于 2015-03-28 20:01:55
首先,确保你没有违反网站的使用条款,采取网络刮取的方法。做一个好的网络刮取公民。
接下来,您可以将User-Agent头设置为假装是一个浏览器。要么在User-Agent设置中提供DEFAULT_REQUEST_HEADERS:
DEFAULT_REQUEST_HEADERS = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.104 Safari/537.36'
}或者,您可以使用中间件旋转用户代理。下面是我基于fake-useragent包实现的一个包:
另一个可能的问题是,您经常访问网站,请考虑调整设置。
下载程序在从同一网站下载连续页面之前应等待的时间(以秒为单位)。这可以用来控制爬行速度,以避免服务器受到太大的打击。
还有一个可以产生积极影响的相关设置:CONCURRENT_REQUESTS
最大并发数(如。)将由Scrapy下载机执行的请求。
https://stackoverflow.com/questions/29313350
复制相似问题