快捷搜索:

您的位置:澳门新葡4473网站 > 项目 > 批量爬取某(和谐)论坛的美图

批量爬取某(和谐)论坛的美图

发布时间:2019-12-18 23:02编辑:项目浏览(183)

    我想用T类型的变量进行一个计算但它不支持算术运算符各位大佬有什么办法解决这个问题吗?

    功能说明

    爬取某个不能说的网站的"新时代的xxx"版块下的所有帖子中的图片
    因论坛限制,未注册用户只能访问前100页数据
    该文章仅供学习,代码中的地址已做和谐处理,(✿◡‿◡)

    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApplication2{classProgram{staticvoidMain(string[]args){aProgram.Add();//T类型不适合此方法aint.Add();//jijubhuibuibastring.Add();Console.ReadKey();}}classaT{privatestaticTt;publicstaticTAdd(){//①子类对象可以直接赋值给父类变量;//③如果父类对象中装的是子类对象,可以将这个父类对象强转为子类对象;//is:如果转换成功,返回true,失败返回false;if(tisint||(tasstring==null))//如果返回为true则证明T类型是int和string{Console.WriteLine("复制并连接或相加");t=t+t;returnt;}else{Console.WriteLine("T类型不适合此方法");}}}}
    
    第一部分代码

    1,构建函数get_post_urls()解析出帖子列表页面所有帖子的地址
    2,调用函数,解析出前100页帖子的地址
    3,将帖子地址保存到mongodb数据库中,因为该论坛的地址会随时变动,所以我们只保存了帖子地址的后办部分,后期使用的时候可以根据情况随时更改前半部分,也就是代码中的forum_url。
    4,'status': 'new'值用于标识地址的状态

    # -*- coding: utf-8 -*-
    
    import requests
    from bs4 import BeautifulSoup
    import pymongo
    
    
    def get_post_urls(sub_url):
        """获取某一页帖子列表中所有帖子的地址"""
        res = requests.get(sub_url, headers={'Accept-Encoding': ''})
        soup = BeautifulSoup(res.text,'lxml')
        datas = soup.select('h3 > a')
        post_urls = []
        for data in datas:
            post_urls.append(data.get('href'))
        return post_urls
    
    
     if __name__ == '__main__':
         client = pymongo.MongoClient('localhost', 27017)
         db_cl = client['db_cl']
         col_newworld = db_cl['col_newworld']
         forum_url = 'http://c*.o1t.***/'
         sub_urls = [forum_url + 'thread0806.php?fid=8&search=&page={}'.format(str(i)) for i in range(1, 100)]
         for sub_url in sub_urls:
             for post_url in get_post_urls(sub_url):
                 post_url = post_url
                 data = {
                     'status': 'new',
                     'post_url': post_url
                 }
                 col_newworld.insert_one(data)
                 print(post_url)
             print(sub_url)
         print('END!!!')
    

    这是我搜到的以前的一个帖子,这个帖子里好像也没有解决的方法

    第二部分代码

    1,从数据库中取出帖子地址,解析出标题和图片地址
    2,使用标题做文件夹名称,每个帖子创建一个文件夹,保存该帖子下的所有图片
    3,使用完一个地址后则在数据库中将其状态更新为"used",避免重复下载
    4,因为我也不知道的原因,帖子标题正常解析出来都是乱码,经过几个小时的搜索加了代码res.encoding = res.apparent_encoding总算部分解决了,说部分解决是因为繁体字解析出来仍然是乱码。
    5,.limit(5)控制每次下载的帖子数目,可以根据情况自己修改

    # -*- coding: utf-8 -*-
    
    """
    从数据库中读取帖子地址并下载帖子中的图片保存到本地
    """
    import requests
    from bs4 import BeautifulSoup
    import pymongo
    import os
    
    
    def dl_img(post_url):
        """根据帖子地址解析出帖子中所有图片地址"""
        res = requests.get(post_url)
        res.encoding = res.apparent_encoding  # 解决中文乱码问题
        soup = BeautifulSoup(res.text, 'lxml')
        title = soup.select('h4')[0].get_text()
        img_urls = soup.select('input[type="image"]')
        fdir = os.mkdir('C:WWBpythonclpic\' + title + '\')
        index = 1
        for img_url in img_urls:
            img = requests.get(img_url.get('src'))
            file = 'C:WWBpythonclpic\' + title + '\' + str(index) + '.jpg'
            with open(file, 'wb') as f:
                f.write(img.content)
                print(index)
                index += 1
        print(post_url)
    
    
    if __name__ == '__main__':
        client = pymongo.MongoClient('localhost', 27017)
        db_cl = client['db_cl']
        col_newworld = db_cl['col_newworld']
        forum_url = 'http://c*.o1t.***/'
        for item in col_newworld.find({'status': 'new'}).limit(5):
            try:
                dl_img(forum_url + item['post_url'])
                col_newworld.update({'status': 'new'}, {'$set': {'status': 'used'}})
            except Exception as e:
                print(item)
        print('END!!!')
    

    本文由澳门新葡4473网站发布于项目,转载请注明出处:批量爬取某(和谐)论坛的美图

    关键词:

上一篇:写日志类

下一篇:没有了