请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

博客园就爬取一条就停止了,连接es出了问题

https://img1.sycdn.imooc.com//szimg/5e85f4f0097017e715410672.jpg

https://img1.sycdn.imooc.com//szimg/5e85f56d0935c23010530512.jpg

https://img1.sycdn.imooc.com//szimg/5e86a2cc0975bcdb03210048.jpg

我可以通过es_types来创建索引

https://img1.sycdn.imooc.com//szimg/5e86a67d091cd7ff11060334.jpg

那看来是数据导入es那里有问题

我是直接运行您的代码的

还有前端    TransportError(404, 'index_not_found_exception', 'no such index')

https://img1.sycdn.imooc.com/szimg/5e85f7d409ee739e08790236.jpg

正在回答 回答被采纳积分+3

2回答

提问者 fine纯粹 2020-04-03 12:58:53

我是用您的源代码运行的,因为每页只爬取一条所以一下子就要登录了

//img1.sycdn.imooc.com//szimg/5e87faaf098fd38205000179.jpg

博客园部分代码     不知道哪里出了问题,要怎么获取每页的全部文章呢?

#收集博客园所有404的url以及404页面数
handle_httpstatus_list = [404]

def __init__(self, **kwargs):
    self.fail_urls = []
    dispatcher.connect(self.handle_spider_closed, signals.spider_closed)

def handle_spider_closed(self, spider, reason):
    self.crawler.stats.set_value("failed_urls", ",".join(self.fail_urls))

def parse(self, response):
    """
    1. 获取文章列表页中的文章url并交给scrapy下载后并进行解析
    2. 获取下一页的url并交给scrapy进行下载, 下载完成后交给parse
    """
    #解析列表页中的所有文章url并交给scrapy下载后并进行解析
    if response.status == 404:
        self.fail_urls.append(response.url)
        self.crawler.stats.inc_value("failed_url")

    post_nodes = response.css('#news_list .news_block')
    for post_node in post_nodes:
        image_url = post_node.css('.entry_summary a img::attr(src)').extract_first("")
        if image_url.startswith("//"):
            image_url = "https:" + image_url
        post_url = post_node.css('h2 a::attr(href)').extract_first("")
        yield Request(url=parse.urljoin(response.url, post_url), meta={"front_image_url": image_url},
                      callback=self.parse_detail)
        break

    #提取下一页并交给scrapy进行下载
    next_url = response.xpath("//a[contains(text(), 'Next >')]/@href").extract_first("")
    if next_url:
        yield Request(url=parse.urljoin(response.url, next_url), callback=self.parse)


0 回复 有任何疑惑可以回复我~
bobby 2020-04-03 11:58:39

是否有运行es_model的init方法生成这个索引对象 你的es是什么版本?

0 回复 有任何疑惑可以回复我~
  • 提问者 fine纯粹 #1
    运行es_types来创建索引后,数据的确可以写人es了但是只有一条数据就结束了。我的es是5.5.3版本  dsl是5.1.0,我把结果和报错截图放在另一个回答上请老师看一下
    回复 有任何疑惑可以回复我~ 2020-04-03 12:54:56
  • bobby 回复 提问者 fine纯粹 #2
    你的意思是抓取到一条数据以后就报错无法继续入库了 还是没有报错 但是一直都只能入库一条数据?你可以在es的pipeline中打断点看能进入几次?
    回复 有任何疑惑可以回复我~ 2020-04-04 13:32:14
  • 提问者 fine纯粹 回复 bobby #3
    es可以正常入库,只是博客园它就爬每一页的第一条,没有爬取每一页的全部内容。具体代码和截图我放在另外一个回答那里
    回复 有任何疑惑可以回复我~ 2020-04-04 17:02:30
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号