首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用刮伤爬行bbs时的扭曲故障

使用刮伤爬行bbs时的扭曲故障
EN

Stack Overflow用户
提问于 2015-03-28 03:29:50
回答 1查看 597关注 0票数 1

我是的新手,写了一个简单的脚本来从我学校的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中有上千个帖子,但是每次我运行我的蜘蛛,它只能随机得到其中的几个。我的代码如下所示,非常感谢您的帮助

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-28 20:01:55

首先,确保你没有违反网站的使用条款,采取网络刮取的方法。做一个好的网络刮取公民

接下来,您可以将User-Agent头设置为假装是一个浏览器。要么在User-Agent设置中提供DEFAULT_REQUEST_HEADERS

代码语言:javascript
复制
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下载机执行的请求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29313350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档