示例#1
0
 def parse_new(self, response):
     ''' 抓取 最新活动线报http://www.0818tuan.com/list-1-0.html的url地址;
     或者打开本地json数据,判断是url否被抓取过
     '''
     page_one = Selector(response)
     #全部内容,并且 用 /a分成一行一行  (必须是多行才行,如果不分行,一整块肯定是不行的)
     contents = page_one.xpath(
         '//*[@id="redtag"]/a')  #这个后面不需要加extract,因为后面的 cc 还要调用
     #print(contents)
     #因为爬取是相同类型的数据,所以用循环处理
     for cc in contents:
         print('第-----xx-----行', cc)
         item = SpiderymItem()
         #再次调用 xpath 匹配时,  加一个  。   就会在之前的基础上找
         url_one = cc.xpath('./@href').extract_first()  #完整的网址
         #print(url_one)
         #title = ''
         title = cc.xpath('./@title').extract_first()  #标题
         print('标题--------------------', title)
         time = cc.xpath('./span/text()').extract_first()  #时间
         if url_one == '/xbhd/234233.html':
             #无用的网址,会出错,因为不再title里,所以直接检测网页
             continue
         if title == '' or title == None:
             #标题为空时,跳过
             continue
         #各种判断
         #if title.find('APP发布') != -1:
         #排除第一个  0818团线报网APP发布 推送、分享、交流互助都有。。。  -1是没有找到的意思
         #continue
         #判断是否符合关键字,包含或不包含
         if not self.is_keyword_valid(title):
             continue
         '''    
         if self.result.get(url[i]):
         #如果网页已存在与json文件中,跳过
             return
         '''
         yield Request(url=self.url_base + url_one,
                       meta={
                           'title': title,
                           'time': time
                       },
                       callback=self.parse_new_ok)
示例#2
0
    def parse_new_ok(self, response):
        #访问网页
        page_ok = Selector(response)
        #建立item
        item = SpiderymItem()
        imgs = list()
        urls = list()
        content_text = list()
        yes_or_no = True
        #--------------------------------------------------------标题
        title = response.meta['title']
        if title:
            #如果有标题
            #print('title-------------------',title)
            item['title_0818'] = title
        #--------------------------------------------------------时间,没什么用
        time = response.meta['time']
        if time:
            #如果有时间
            item['time_0818'] = time

        #-----------------------------------------------------------整个内容大块,全部内容
        contents = page_ok.xpath('//div[@class="post-content"]')
        num = contents.xpath('./p').extract()  #有多少个P
        if len(
                num
        ) <= 6:  #------------------------------------------------如果小于等于6个P,则只取第一个P内容
            content_ss = contents.xpath(
                './p[1]/descendant-or-self::*')  #把P1下的所有切割,选取下面所有子节点和本身节点
        else:
            #-----------------------------------------------------------------如果大于6个P,分解下面所有节点
            print('大于6个P--------------------------', len(num), '个')
            content_ss = contents.xpath(
                './descendant-or-self::*')  #注意,这里除了P还有其他的节点,比如div

        for content in content_ss:
            ls_text = content.xpath('./text()').extract_first()  #文本内容
            ls_url = content.xpath('./a/@href').extract_first()  #链接
            ls_img = content.xpath('./img/@src').extract_first()  #图片

            if ls_text:
                #如果有文本
                if ls_text != '':  #如果不为空
                    #print('文本------------',ls_text)
                    content_text.append(ls_text)  #也改成列表
            if ls_url:
                #如果有链接
                #print('url------------',ls_url)
                urls.append(
                    self.url_zh(ls_url))  #去除链接中的网站前缀 0818tuan.com.......
            if ls_img:
                #如果有图片
                #print('img------------',ls_img)
                imgs.append(ls_img)

        num_urls = len(urls)
        num_imgs = len(imgs)
        num_cts = len(content_text)

        if num_imgs == 0 and num_urls == 0:
            #如果图片和链接都没有(只有文字),则不采集
            yes_or_no = False

        print('yes_or_no-------------', yes_or_no)
        print('原链接个数--------------', num_urls)
        print('图片个数--------------', num_imgs)
        print('原文本个数--------------', num_cts)
        print('原文本内容--------------', content_text)

        cts = self.cts_zh(content_text)  #去除文本中没用的
        urls = list(set(urls))  #去除链接中重复项

        #----------------------------查找完所有图片/文本/链接,放入item
        item['cts_0818'] = cts
        item['urls_0818'] = urls
        item['imgs_0818'] = imgs
        item['yon'] = yes_or_no

        yield item
        '''
        #print(contents)
        #-----------------------------------------------------------所有div节点 (少部分有),给链接
        #这种链接好像都带有0818tuan,自己的链接。考虑是否删掉
        div = contents.xpath('./div')
        if div:
            #如果有div
            print('有div------------',div.extract())
            #临时url  
            url_ls = div.xpath('./a/@href')
            if url_ls:
                #如果有链接,一般有div就有链接
                urls.append('div中的链接--' + url_ls.extract_first())
        #------------------------------------------------------------整个内容大块的text,给内容
        #全部文本
        all_ct = contents.xpath('string(.)').extract()
        print(type(all_ct))
        print('全部1---------',all_ct)
        print(len(all_ct),'个----------------')
        print(len(all_ct[:-4]),'个----------------')
        for i in all_ct[:-5]:
            all_ct2 = ''.join(i.split())
            print('全部2---------',all_ct2)

        text = contents.xpath('./text()')
        for i in text.extract():
            #去除 '\r\n                '这样的文本
            #b_ls = i.replace('\n','').replace('\r','').replace(' ','')
            b_ls = "".join(i.split())
            if b_ls != '':
                #如果有内容,  
                print('大块中的文本 ------------',b_ls)
                content_text += b_ls

        #-------------------------------------------------------查找所有段落,找链接、图片
        p = contents.xpath('./p')
        #临时P_ls,全部展开,删除后5个P段落
        p_ls = p.extract()[:-5]
        for i in range(len(p_ls)):  #---------------------------遍历所有段落
            #如果到了P 段,如何写 xpath 续写后面的,?
            str_1 = './p[{}]/text()'.format(i+1) #----------------查找段落中的文本
            text_1 = contents.xpath(str_1).extract_first()  #文本给内容
            if text_1:
                #如果有内容,内容先不记录,再看如何判断放入哪些文本进去
                c_ls = "".join(text_1.split())
                content_text += c_ls
                print('P 中的 文本----------',c_ls)
            #--------------------------------------------------------查找段落的是否有链接
            str_2 = './p[{}]/a/@href'.format(i+1) #获取P段落下a节点的href,一般是链接,有下面两种链接
            #http://m.0818tuan.com/jd/?u=https%3A%2F%2Fitem.jd.com%2F51501863225.html
            #http://m.0818tuan.com/suning/?visitUrl=https%3A%2F%2Fproduct.suning.com%2F0000000000%2F10310212467.html
            text_2 = contents.xpath(str_2).extract()  #给链接,也要给内容,可能有多个链接
            if text_2:
                #如果找到了 链接,则放入 url列表
                for x in text_2:
                    url_ls = self.url_zh(x)
                    print('链接----------',url_ls)
                    urls.append('P段落中的链接--' + url_ls)
                #给内容
                    content_text = content_text + url_ls + '\n'
            #-------------------------------------------------------查找段落是否有图片内容
            str_3 = './p[{}]/img/@src'.format(i+1)  #获取图片链接
            text_3 = contents.xpath(str_3).extract_first()
            if text_3:
                #如果有图片
                imgs.append(text_3)
                print('图片地址-----------',text_3)


        #----------------------------查找完所有图片/文本/链接,放入item
        item['content_0818'] = content_text
        item['url_0818'] = urls
        item['imgs_0818'] = imgs
        
        if len(p) > 6:
            #去掉后面5个 P段落
            print('警告-----------大于6个段落')
            for i in range(len(p[:-5])):
                cc_1 = './p[{}]/text()'.format(i)
                print('cc_1-------------',cc_1)
                cc_2 = contents.xpath(cc_1).extract_first()
                print('cc_2-------------',cc_2)
                #如果有内容
                if cc_2:
                    cc_a = re.sub(r'(<br/?>\s*\n?)+', '@#@',cc_2)
                    cc_b = cc_a.replace('@#@','\n')
                    print('大于6个段落里的内容有---------------',cc_b)
                    #先不管图片
                    item['content_0818'] = cc_b
            yield item

            src = contents.xpath('./p[1]/img/@src').extract()
            if len(src) > 0:
                #找图片,如果没有,则跳出循环,如果有,则存入列表,因为可能有多张图片
                for i in range(len(src)):
                    imgs.append(src[i])
                print(imgs)
                item['imgs_0818'] = imgs
            else:
                print('没有图片')
        
        '''
        '''    
示例#3
0
文件: v4.py 项目: yeqiling/Yangmao
    def parse_new_ok(self, response):
        #访问网页
        page_ok = Selector(response)
        #建立item
        item = SpiderymItem()
        imgs = list()
        urls = list()
        content_text = list()
        yes_or_no = True
        #--------------------------------------------------------标题
        title = response.meta['title']
        if title:
            #如果有标题
            #print('title-------------------',title)
            item['title_0818'] = title
            content_text.append(title)  #放入title,后面可以转换成元组然后把重复的删除掉,以防标题和内容重复
        #--------------------------------------------------------时间,没什么用
        time = response.meta['time']
        if time:
            #如果有时间
            item['time_0818'] = time

        #-----------------------------------------------------------整个内容大块,全部内容
        contents = page_ok.xpath('//div[@class="post-content"]')
        content_ss = contents.xpath(
            './descendant-or-self::*')  #注意,这里除了P还有其他的节点,比如div

        num_2 = len(content_ss.extract())
        print('-----------共有', num_2, '个节点')

        for content in content_ss:
            ls_text = content.xpath('./text()').extract()  #文本内容
            #print('文本内容数量---------',len(content.xpath('./text()').extract()))
            #ls_url = content.xpath('./a/@href').extract_first() #链接
            #ls_url = content.xpath('./a')
            ls_urls = self.zh_url_mapping(content)  #字典,获取a标签,方便后面获取链接和链接的文本,转换
            #print('链接内容数量---------',len(content.xpath('./a/@href').extract()))
            #ls_url_text = content.xpath('./a/text()').extract_first()  #链接文本
            ls_img = content.xpath('./img/@src').extract_first()  #图片

            #难点
            #1、ls_url也要设置成列表!!!否则一些P1下的链接获取不到比如http://www.0818tuan.com/xbhd/235344.html
            #链接替换原本的文本中的 链接
            #2、怎么按顺序排列  P1下的 文字、链接、文字、链接。 现在是一整块的 文字,和一整块的链接
            '''    
            if ls_url:
                #如果是短地址,则忽略
                ls_url = self.zh_url(ls_url)#去除链接中的网站前缀 0818tuan.com.......
                if ls_url.find('http') != -1:   #找到了http
                    #如果没用http,说明是短链接,/xbhd/235097.html,忽略,否则,加入链接和文本
                    #还有种情况 /tao/taoke.php?item_id=534465655558  ,他用js省略了链接。这种情况不要也罢,是网站的链接
                    urls.append(ls_url) #加入到链接
                    content_text.append(ls_url) #加入到文本内容
            '''
            if ls_text:
                #如果有文本,列表
                #ls_text = self.zh_text(ls_text) #去除空格等, 去除空格,顺序就会错乱
                if len(ls_text) > 1:
                    print('找到好多文本------有', len(ls_text), '个')
                content_ls = ';'.join(ls_text)
                #print('合并的文本------------------',content_ls)
                if ls_urls:
                    for ls_url in ls_urls:
                        #ls_url是字典的key
                        content_ls = content_ls.replace(
                            ls_url, '----' + ls_urls[ls_url])  #替换掉文本中的链接文本

                content_text.append(content_ls)  #也改成列表

            if ls_urls:
                urls.append(ls_urls[ls_url])

            if ls_img:
                #如果有图片
                #print('img------------',ls_img)
                imgs.append(ls_img)

        num_urls = len(urls)
        num_imgs = len(imgs)
        num_cts = len(content_text)

        if num_imgs == 0 and num_urls == 0:
            #如果图片和链接都没有(只有文字),则不采集
            yes_or_no = False
        if self.is_keyword_valid(title, True):
            #但是如果含有标题 关键字,则采集
            yes_or_no = True

        print('yes_or_no-------------', yes_or_no)
        print('原链接个数--------------', num_urls)
        print('图片个数--------------', num_imgs)
        print('原文本个数--------------', num_cts)
        print('原文本内容--------------', content_text)

        cts = self.zh_cts(content_text, False)  #去除文本中没用的,必须先这个,再去除重复,否则顺序会错乱
        #cts = list(set(cts))  #去除文本中重复项,去重复会顺序错乱
        cts = self.zh_cf(cts)  #这样去重复,没问题
        urls = list(set(urls))  #去除链接中重复项

        #----------------------------查找完所有图片/文本/链接,放入item
        item['cts_0818'] = cts
        item['urls_0818'] = urls
        item['imgs_0818'] = imgs
        item['yon'] = yes_or_no

        yield item
        '''
        #print(contents)
        #-----------------------------------------------------------所有div节点 (少部分有),给链接
        #这种链接好像都带有0818tuan,自己的链接。考虑是否删掉
        div = contents.xpath('./div')
        if div:
            #如果有div
            print('有div------------',div.extract())
            #临时url  
            url_ls = div.xpath('./a/@href')
            if url_ls:
                #如果有链接,一般有div就有链接
                urls.append('div中的链接--' + url_ls.extract_first())
        #------------------------------------------------------------整个内容大块的text,给内容
        #全部文本
        all_ct = contents.xpath('string(.)').extract()
        print(type(all_ct))
        print('全部1---------',all_ct)
        print(len(all_ct),'个----------------')
        print(len(all_ct[:-4]),'个----------------')
        for i in all_ct[:-5]:
            all_ct2 = ''.join(i.split())
            print('全部2---------',all_ct2)

        text = contents.xpath('./text()')
        for i in text.extract():
            #去除 '\r\n                '这样的文本
            #b_ls = i.replace('\n','').replace('\r','').replace(' ','')
            b_ls = "".join(i.split())
            if b_ls != '':
                #如果有内容,  
                print('大块中的文本 ------------',b_ls)
                content_text += b_ls

        #-------------------------------------------------------查找所有段落,找链接、图片
        p = contents.xpath('./p')
        #临时P_ls,全部展开,删除后5个P段落
        p_ls = p.extract()[:-5]
        for i in range(len(p_ls)):  #---------------------------遍历所有段落
            #如果到了P 段,如何写 xpath 续写后面的,?
            str_1 = './p[{}]/text()'.format(i+1) #----------------查找段落中的文本
            text_1 = contents.xpath(str_1).extract_first()  #文本给内容
            if text_1:
                #如果有内容,内容先不记录,再看如何判断放入哪些文本进去
                c_ls = "".join(text_1.split())
                content_text += c_ls
                print('P 中的 文本----------',c_ls)
            #--------------------------------------------------------查找段落的是否有链接
            str_2 = './p[{}]/a/@href'.format(i+1) #获取P段落下a节点的href,一般是链接,有下面两种链接
            #http://m.0818tuan.com/jd/?u=https%3A%2F%2Fitem.jd.com%2F51501863225.html
            #http://m.0818tuan.com/suning/?visitUrl=https%3A%2F%2Fproduct.suning.com%2F0000000000%2F10310212467.html
            text_2 = contents.xpath(str_2).extract()  #给链接,也要给内容,可能有多个链接
            if text_2:
                #如果找到了 链接,则放入 url列表
                for x in text_2:
                    url_ls = self.url_zh(x)
                    print('链接----------',url_ls)
                    urls.append('P段落中的链接--' + url_ls)
                #给内容
                    content_text = content_text + url_ls + '\n'
            #-------------------------------------------------------查找段落是否有图片内容
            str_3 = './p[{}]/img/@src'.format(i+1)  #获取图片链接
            text_3 = contents.xpath(str_3).extract_first()
            if text_3:
                #如果有图片
                imgs.append(text_3)
                print('图片地址-----------',text_3)


        #----------------------------查找完所有图片/文本/链接,放入item
        item['content_0818'] = content_text
        item['url_0818'] = urls
        item['imgs_0818'] = imgs
        
        if len(p) > 6:
            #去掉后面5个 P段落
            print('警告-----------大于6个段落')
            for i in range(len(p[:-5])):
                cc_1 = './p[{}]/text()'.format(i)
                print('cc_1-------------',cc_1)
                cc_2 = contents.xpath(cc_1).extract_first()
                print('cc_2-------------',cc_2)
                #如果有内容
                if cc_2:
                    cc_a = re.sub(r'(<br/?>\s*\n?)+', '@#@',cc_2)
                    cc_b = cc_a.replace('@#@','\n')
                    print('大于6个段落里的内容有---------------',cc_b)
                    #先不管图片
                    item['content_0818'] = cc_b
            yield item

            src = contents.xpath('./p[1]/img/@src').extract()
            if len(src) > 0:
                #找图片,如果没有,则跳出循环,如果有,则存入列表,因为可能有多张图片
                for i in range(len(src)):
                    imgs.append(src[i])
                print(imgs)
                item['imgs_0818'] = imgs
            else:
                print('没有图片')
        
        '''
        '''    
示例#4
0
文件: v1.py 项目: yeqiling/Yangmao
    def parse_new_ok(self,response):
        #访问网页
        page_ok = Selector(response)
        #建立item
        item = SpiderymItem()
        imgs = list()
        urls = list()
        content_text = ''
        #--------------------------------------------------------标题
        title = response.meta['title']
        if title:
            #如果有标题
            print('title-------------------',title)
            item['title_0818'] = title
        #--------------------------------------------------------时间,没什么用
        time = response.meta['time']
        if time:
            #如果有时间
            item['time_0818'] = time


        #-----------------------------------------------------------整个内容大块,全部内容
        contents = page_ok.xpath('//div[@class="post-content"]')
        
        #print(contents)
        #-----------------------------------------------------------所有div节点 (少部分有),给链接
        #这种链接好像都带有0818tuan,自己的链接。考虑是否删掉
        div = contents.xpath('./div')
        if div:
            #如果有div
            print('有div------------',div.extract())
            #临时url  
            url_ls = div.xpath('./a/@href')
            if url_ls:
                #如果有链接,一般有div就有链接
                urls.append('div中的链接--' + url_ls.extract_first())
        #------------------------------------------------------------整个内容大块的text,给内容
        #全部文本
        all_ct = contents.xpath('string(.)').extract()
        print(type(all_ct))
        print('全部1---------',all_ct)
        print(len(all_ct),'个----------------')
        print(len(all_ct[:-4]),'个----------------')
        for i in all_ct[:-5]:
            all_ct2 = ''.join(i.split())
            print('全部2---------',all_ct2)

        text = contents.xpath('./text()')
        for i in text.extract():
            #去除 '\r\n                '这样的文本
            #b_ls = i.replace('\n','').replace('\r','').replace(' ','')
            b_ls = "".join(i.split())
            if b_ls != '':
                #如果有内容,  
                print('大块中的文本 ------------',b_ls)
                content_text += b_ls

        #-------------------------------------------------------查找所有段落,找链接、图片
        p = contents.xpath('./p')
        #临时P_ls,全部展开,删除后5个P段落
        p_ls = p.extract()[:-5]
        for i in range(len(p_ls)):  #---------------------------遍历所有段落
            #如果到了P 段,如何写 xpath 续写后面的,?
            str_1 = './p[{}]/text()'.format(i+1) #----------------查找段落中的文本
            text_1 = contents.xpath(str_1).extract_first()  #文本给内容
            if text_1:
                #如果有内容,内容先不记录,再看如何判断放入哪些文本进去
                c_ls = "".join(text_1.split())
                content_text += c_ls
                print('P 中的 文本----------',c_ls)
            #--------------------------------------------------------查找段落的是否有链接
            str_2 = './p[{}]/a/@href'.format(i+1) #获取P段落下a节点的href,一般是链接,有下面两种链接
            #http://m.0818tuan.com/jd/?u=https%3A%2F%2Fitem.jd.com%2F51501863225.html
            #http://m.0818tuan.com/suning/?visitUrl=https%3A%2F%2Fproduct.suning.com%2F0000000000%2F10310212467.html
            text_2 = contents.xpath(str_2).extract()  #给链接,也要给内容,可能有多个链接
            if text_2:
                #如果找到了 链接,则放入 url列表
                for x in text_2:
                    url_ls = self.url_zh(x)
                    print('链接----------',url_ls)
                    urls.append('P段落中的链接--' + url_ls)
                #给内容
                    content_text = content_text + url_ls + '\n'
            #-------------------------------------------------------查找段落是否有图片内容
            str_3 = './p[{}]/img/@src'.format(i+1)  #获取图片链接
            text_3 = contents.xpath(str_3).extract_first()
            if text_3:
                #如果有图片
                imgs.append(text_3)
                print('图片地址-----------',text_3)


        #----------------------------查找完所有图片/文本/链接,放入item
        item['content_0818'] = content_text
        item['url_0818'] = urls
        item['imgs_0818'] = imgs
        '''
        if len(p) > 6:
            #去掉后面5个 P段落
            print('警告-----------大于6个段落')
            for i in range(len(p[:-5])):
                cc_1 = './p[{}]/text()'.format(i)
                print('cc_1-------------',cc_1)
                cc_2 = contents.xpath(cc_1).extract_first()
                print('cc_2-------------',cc_2)
                #如果有内容
                if cc_2:
                    cc_a = re.sub(r'(<br/?>\s*\n?)+', '@#@',cc_2)
                    cc_b = cc_a.replace('@#@','\n')
                    print('大于6个段落里的内容有---------------',cc_b)
                    #先不管图片
                    item['content_0818'] = cc_b
            yield item

            src = contents.xpath('./p[1]/img/@src').extract()
            if len(src) > 0:
                #找图片,如果没有,则跳出循环,如果有,则存入列表,因为可能有多张图片
                for i in range(len(src)):
                    imgs.append(src[i])
                print(imgs)
                item['imgs_0818'] = imgs
            else:
                print('没有图片')
        '''
        



        '''    
        #文本内容
        content_text1 = contents.xpath('./p[1]')
        print('获取所有文本--------------',content_text1.xpath('string(.)'))
        content_text = contents.xpath('./p[1]/text()').extract_first()
        #print(content_text)
        if content_text:
            #有的页面不是再第一个P 字节下,奇怪。比如 http://www.0818tuan.com/xbhd/233885.html
            # b  <br/> 用@#@ 代替
            b = re.sub(r'(<br/?>\s*\n?)+', '@#@',content_text)
            c = b.replace('@#@','\n')
            print('content_text-------------',c)
            #如果有为文本,则传给item
            item['content_0818'] = c
        #内容回车时,是空的。怎么解决,字符串替换!

        #文中的链接  /a/text()
        #for i in contents.find('a'):
            #href = i.xpath('/')
            #print('链接-------------->',i)
            #待写
        '''
        yield item
示例#5
0
    def parse_new_ok(self, response):
        #访问网页
        page_ok = Selector(response)
        #建立item
        item = SpiderymItem()
        imgs = list()
        urls = list()
        content_text = list()
        yes_or_no = True
        #--------------------------------------------------------标题
        if response.meta['title'] != None:
            #如果有标题
            title = response.meta['title']
            #print('title-------------------',title)
            item['title_0818'] = title
            content_text.append(title)  #放入title,后面可以转换成元组然后把重复的删除掉,以防标题和内容重复
        else:
            #如果没有标题,再次获取标题(为了临时调试网页用,直接输入网页可直接调用parse_new_ok)
            title = page_ok.xpath(
                '//div[@class="post-head"]/h1[@class="text-center"]/text()'
            ).extract_first()
            item['title_0818'] = title
            content_text.append(title)
        #--------------------------------------------------------时间,没什么用
        time = response.meta['time']
        if time:
            #如果有时间
            item['time_0818'] = time

        #-----------------------------------------------------------整个内容大块,全部内容
        contents = page_ok.xpath('//div[@class="post-content"]')
        content_ss = contents.xpath(
            './descendant-or-self::*')  #注意,这里除了P还有其他的节点,比如div

        #num_2 = len(content_ss.extract())
        #print('-----------共有',num_2,'个节点')
        content_cst = contents.xpath('./descendant-or-self::text()')  #获取全部内容
        content_text = content_cst.extract()
        #处理内容的文本列表
        #print('找到的-----原文本--------------------------',content_text)
        cts = self.zh_cts(content_text, False)  #去除文本中没用的,必须先这个,再去除重复,否则顺序会错乱
        #cts = list(set(cts))  #去除文本中重复项,去重复会顺序错乱
        cts = self.zh_cf(cts)  #这样去重复,没问题
        #print('找到的------改后文本--------------------------',cts)
        urls_text = list()  #链接文本
        for content in content_ss:
            #找图片和链接
            #ls_text = content.xpath('./descendant::text()').extract() #文本内容
            #print('文本内容数量---------',len(content.xpath('./text()').extract()))
            #ls_url = content.xpath('./a/@href').extract_first() #链接
            #ls_url = content.xpath('./a')
            ls_url_a = content.xpath('./a')
            ls_urls = self.zh_url_mapping(
                ls_url_a)  #字典,获取a标签,方便后面获取链接和链接的文本,转换,也可以去重复
            #print('链接内容数量---------',len(content.xpath('./a/@href').extract()))
            #ls_url_text = content.xpath('./a/text()').extract_first()  #链接文本
            ls_img = content.xpath('./img/@src').extract()  #图片

            #难点
            #1、ls_url也要设置成列表!!!否则一些P1下的链接获取不到比如http://www.0818tuan.com/xbhd/235344.html
            #链接替换原本的文本中的 链接
            #2、怎么按顺序排列  P1下的 文字、链接、文字、链接。 现在是一整块的 文字,和一整块的链接

            #BUG
            #1、有时候,内容里的链接没有替换到
            #2、删除一些长的文本

            if ls_urls:
                for ls_url in ls_urls:
                    #ls_url是字典的key
                    #content_ls = content_ls.replace(ls_url,'----'+ls_urls[ls_url])   #替换掉文本中的链接文本
                    urls.append(ls_urls[ls_url])  #把真实链接存入链接列表
                    urls_text.append(ls_url)

            if ls_img:
                #如果有图片
                #print('img------------',ls_img)
                for ls_1 in ls_img:
                    imgs.append(ls_1)

        #print('链接文本----------------',urls_text)
        #print('真实链接----------------',urls)
        for x in range(len(cts)):
            for i in range(len(urls_text)):
                #清除链接中的空格,a下链接文本有的网址,莫名其妙竟然有空格
                urls_text[i] = re.sub('\s', '', urls_text[i])
                if urls_text[i] == cts[x] and cts[x] != urls[i]:
                    print(cts[x], '替换成---------', urls[i])
                    cts[x] = urls[i]
                #如果内容在链接文本里出现 ,替换成 原始链接

        num_urls = len(urls)
        num_imgs = len(imgs)
        #num_cts = len(content_text)

        if num_imgs == 0 and num_urls == 0:
            #如果图片和链接都没有(只有文字),则不采集
            yes_or_no = False
        if self.is_keyword_valid(title, True):
            #但是如果含有标题 关键字,则采集
            yes_or_no = True

        #print('yes_or_no-------------',yes_or_no)
        print('原链接个数--------------', num_urls)
        print('图片个数--------------', num_imgs)
        #print('原文本个数--------------',num_cts)
        #print('原文本内容--------------',content_text)

        cts = self.zh_cf(cts)  #去掉文本中重复项
        urls = self.zh_cf(urls)  #去掉链接中重复项
        #----------------------------查找完所有图片/文本/链接,放入item
        item['cts_0818'] = cts
        item['urls_0818'] = urls
        item['imgs_0818'] = imgs
        item['yon'] = yes_or_no

        yield item
        '''
        #print(contents)
        #-----------------------------------------------------------所有div节点 (少部分有),给链接
        #这种链接好像都带有0818tuan,自己的链接。考虑是否删掉
        div = contents.xpath('./div')
        if div:
            #如果有div
            print('有div------------',div.extract())
            #临时url  
            url_ls = div.xpath('./a/@href')
            if url_ls:
                #如果有链接,一般有div就有链接
                urls.append('div中的链接--' + url_ls.extract_first())
        #------------------------------------------------------------整个内容大块的text,给内容
        #全部文本
        all_ct = contents.xpath('string(.)').extract()
        print(type(all_ct))
        print('全部1---------',all_ct)
        print(len(all_ct),'个----------------')
        print(len(all_ct[:-4]),'个----------------')
        for i in all_ct[:-5]:
            all_ct2 = ''.join(i.split())
            print('全部2---------',all_ct2)

        text = contents.xpath('./text()')
        for i in text.extract():
            #去除 '\r\n                '这样的文本
            #b_ls = i.replace('\n','').replace('\r','').replace(' ','')
            b_ls = "".join(i.split())
            if b_ls != '':
                #如果有内容,  
                print('大块中的文本 ------------',b_ls)
                content_text += b_ls

        #-------------------------------------------------------查找所有段落,找链接、图片
        p = contents.xpath('./p')
        #临时P_ls,全部展开,删除后5个P段落
        p_ls = p.extract()[:-5]
        for i in range(len(p_ls)):  #---------------------------遍历所有段落
            #如果到了P 段,如何写 xpath 续写后面的,?
            str_1 = './p[{}]/text()'.format(i+1) #----------------查找段落中的文本
            text_1 = contents.xpath(str_1).extract_first()  #文本给内容
            if text_1:
                #如果有内容,内容先不记录,再看如何判断放入哪些文本进去
                c_ls = "".join(text_1.split())
                content_text += c_ls
                print('P 中的 文本----------',c_ls)
            #--------------------------------------------------------查找段落的是否有链接
            str_2 = './p[{}]/a/@href'.format(i+1) #获取P段落下a节点的href,一般是链接,有下面两种链接
            #http://m.0818tuan.com/jd/?u=https%3A%2F%2Fitem.jd.com%2F51501863225.html
            #http://m.0818tuan.com/suning/?visitUrl=https%3A%2F%2Fproduct.suning.com%2F0000000000%2F10310212467.html
            text_2 = contents.xpath(str_2).extract()  #给链接,也要给内容,可能有多个链接
            if text_2:
                #如果找到了 链接,则放入 url列表
                for x in text_2:
                    url_ls = self.url_zh(x)
                    print('链接----------',url_ls)
                    urls.append('P段落中的链接--' + url_ls)
                #给内容
                    content_text = content_text + url_ls + '\n'
            #-------------------------------------------------------查找段落是否有图片内容
            str_3 = './p[{}]/img/@src'.format(i+1)  #获取图片链接
            text_3 = contents.xpath(str_3).extract_first()
            if text_3:
                #如果有图片
                imgs.append(text_3)
                print('图片地址-----------',text_3)


        #----------------------------查找完所有图片/文本/链接,放入item
        item['content_0818'] = content_text
        item['url_0818'] = urls
        item['imgs_0818'] = imgs
        
        if len(p) > 6:
            #去掉后面5个 P段落
            print('警告-----------大于6个段落')
            for i in range(len(p[:-5])):
                cc_1 = './p[{}]/text()'.format(i)
                print('cc_1-------------',cc_1)
                cc_2 = contents.xpath(cc_1).extract_first()
                print('cc_2-------------',cc_2)
                #如果有内容
                if cc_2:
                    cc_a = re.sub(r'(<br/?>\s*\n?)+', '@#@',cc_2)
                    cc_b = cc_a.replace('@#@','\n')
                    print('大于6个段落里的内容有---------------',cc_b)
                    #先不管图片
                    item['content_0818'] = cc_b
            yield item

            src = contents.xpath('./p[1]/img/@src').extract()
            if len(src) > 0:
                #找图片,如果没有,则跳出循环,如果有,则存入列表,因为可能有多张图片
                for i in range(len(src)):
                    imgs.append(src[i])
                print(imgs)
                item['imgs_0818'] = imgs
            else:
                print('没有图片')
        
        '''
        '''