集成自己的番号+磁链库

1.使用的数据库,mongodb,格式就是简单的{‘番号’:番号,‘磁链’:磁链}

2.目标网页有两个
a:http://www.233mr.com/nvyou/
b:http://www.xiliti.com/fhtj/
这两个网页的布局都是简单的两段式:1.汇总页面,2.个人页面
对于但是a和b有不太相似,a是个人页面拥有众多的番号,b是个人页面只有单个番号,且b的汇总页中简介了番号,所以使用对a使用二段式抓数据,b使用一次抓取
番号获取成功后,使用网站https://www.zhongziso.com进行获取磁链操作
3.开始
对a:

def get_av_link(self,response):
        link_and_name = []
        if response:
            xresponse = etree.HTML(response.text)
        else:
            exit()
        all_av = xresponse.xpath('//ul[@class="sch2"]/li')
        for i in all_av:
            try:
                av_links = ''.join(i.xpath('a/@href'))
                av_name = ''.join(i.xpath('a/@title'))
            except Exception as error:
                pass
            if av_links and av_name:
                link_and_name.append((av_links,av_name))      
        return link_and_name

获取所有的个人页面的地址后,获取番号,而番号的格式类似:
【字母(不定)-数字不定(不定)】例子:(ipz-233)
所以构造正则([A-Za-z]+-[0-9]+),但是或许有其他的不应该出现的类似:
utf-8 之类的。所以限定抽离的文字范围

def get_fanhao(self,link_and_name):
        total = []
        pattern = '

.*?([A-Za-z]+-[0-9]+)' for i in link_and_name: response = self.get_content(i[0]) seeds = [''.join(j) for j in re.findall(pattern,response.text)] total += seeds return total

就这样获取所有的番号

对b:

def get_url2(self):
        urls = ['http://www.xiliti.com/fhtj/']# 需要多少页,可以自己添加,我只是测试,所以不想对网站造成太大的困扰
        fanhaos = []# 普通的番号,格式类似以上
        jialebis = []# 加勒比特有的番号格式
        for i in urls:
            response = self.get_content(i)
            if response:
                xresponse = etree.HTML(response.text)
            # print li
            print 'all url get==='
            # self.get_fanhao2([''.join(i) for i in xresponse.xpath('//div[@class="post-thumb"]/a/@href')])
            pattern1 = re.compile('[A-Za-z]+-[0-9]+')# 普通番号的正则
            pattern2 = re.compile('[A-Za-z0-9]+')
            # 非传统的番号好像就是一串数字加字母的组合
            li = xresponse.xpath('//div[@class="post-thumb"]/a')# 限定范围
            for i in li:
                if len(i) != 0:
                    alt = ''.join(i.xpath('img/@alt'))
                    fanhao = ''.join(re.findall(pattern1,alt))
                    if fanhao:
                        fanhaos.append(fanhao)

                    else:
                        jialebi = ''.join(re.findall(pattern2,alt))
                        if jialebi:
                            jialebis.append(jialebi)
                        else:
                            print 'no'  
        return fanhaos 

以上就是获取番号部分的操作,然后就是获取磁链的部分了

for i in li:
# 这里的li指的是番号列表,任何一个i是一个番号
                url = 'https://www.zhongziso.com/list/'+str(i)+'/1'
                print url,'++++++'
                self.get_top_url(self.get_content(url),i)
                # 
def get_top_url(self,response,seed):
        li = []
        if response:
            xresponse = etree.HTML(response.text)
        else:
            print '----response is none-----'
            return None
        section = xresponse.xpath('//tbody')
        for i in section:
            firenum = int(self.method(i.xpath('tr[2]/td[3]/strong/text()')))
            # 热度
            url = 'https://www.zhongziso.com'+self.method(i.xpath('tr[1]/.//a/@href'))
            # 磁链所在的页面
            show_time = self.method(i.xpath('tr[2]/td[1]/strong/text()'))
            # 发布时间
            li.append((firenum,url,show_time))

然后将li 中的所有内容全部保存在本地文件就可以
当然也可以讲代码重构,形成一个增量式的抓取代码段

你可能感兴趣的:(爬虫)