python scrapy如何在存储item结果时候去掉里面的无效url?

我有个需求,需要存储新闻的标题,正文,链接URL
我目前可以全部获取到数据,但是我想在存储前对链接URL进行监测判断是否为有效链接
这个在piplines里面如何写啊,我看网上都是些scrapy本身架构在爬取url时候的去重和判断url是否有效,没有提到在item里面存储url时候进行验证的教程。

我现在想再pipelines里面去写一个request函数,然后判断item里面的url状态是否为200,但是还是不行。

clipboard.png

class JiaminNewsPipeline(object):
    def getHttpStatusCode(url):
        userAgent = {
            "user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"}
        timeOut = 4
        try:
            request = requests.get(url, headers=userAgent, timeout=timeOut)
            httpStatusCode = request.status_code
            return httpStatusCode

        except requests.exceptions.HTTPError as e:
            return e
    def  __init__(self):
        self.wb=Workbook()
        self.ws=self.wb.active
        #设置表头
        self.ws.append(['嘉民新闻标题','新闻发布时间','新闻URL'])
    def process_item(self,item,spider):
        if spider.name=="jiamin":
            if self.getHttpStatusCode(item['newslink']) == 200:
                line = [item['newstitle'], item['newtiems'], item['newslink']]  # 把数据中每一项整理出来
                self.ws.append(line)
                self.wb.save('JiaminNews.xlsx')  # 保存xlsx文件
                return item
            else:
                raise DropItem("无效的URL链接 %s" % item)
阅读 2.2k
1 个回答

piplines不是也可以拿到spider么

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题