zoukankan      html  css  js  c++  java
  • 3-百度贴吧爬虫

    被写文件坑了一晚上,因为自己写了writeFile(),但是调用的是WriteFile()刚好python里面有WriteFile()所以刚好不报错!!!!!

    #_*_ coding: utf-8 _*_
    
    '''
    Created on 2018 7月12号
    @author: sss
    类型:get请求
    功能:爬取百度贴吧的页面,可以分页
    
    '''
    from pip._vendor.distlib.compat import raw_input
    import urllib
    import urllib.parse
    import urllib.request
    from tokenize import endpats
    from fileinput import filename
    from _winapi import WriteFile
    from ctypes.wintypes import PINT
    
    def loadPage(url, filename):
        """
            作用:根据url发送请求,获取服务器相应的文件
         url: 需要爬取得url地址
         filename: 文件名
        """
        print('正在下载' + filename)
        
        headers = {'User-Agent': "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
        
        request = urllib.request.Request(url, headers = headers)
        response = urllib.request.urlopen(request )
        
        return response.read()
        
    def WriteFile(html, filename):   #python里面自带WriteFile所以注意自己调用的是谁写的,调用自己的是否函数名一致了
        """
            作用:保存服务器响应文件到本地磁盘文件
         html:服务器相应文件
         filename: 本地磁盘文件名
        """
        with open(filename, 'wb+') as f:
            f.write(html)
    #     f = open(filename, 'wb+')
    #     f.write(html)
    #     f.close
        print('已写入:' + filename)
    
    def tiebaSpider(url, beginPage, endPage):
        """
                作用:负责处理url,分配每个url去发送请求
           url: 需要处理的第一个url
           beginPage: 爬虫执行的其实页面
           endPage: 爬虫执行的截止页面
        """
        for page in range(beginPage, endPage + 1):
            pn = (page - 1) * 50
            
            filename = '第' + str(page) + '页.html'
            #组合完整的url,并且pn每次增加50
            fullurl = url + "&pn=" + str(pn)
            print(fullurl)
            
            #调用loadPage()发送请求获取html页面
            html = loadPage(fullurl, filename)
            #将获得的html页面写入本地磁盘文件
            WriteFile(html, filename)         
        print('完成!')
    
    if __name__ == "__main__":
        kw = raw_input("请输入需要爬取的贴吧")
        #输入起始页和终止页,str转为int类型
        beginPage = int(raw_input('请输入起始页'))
        endPage = int(raw_input('请输入终止页'))
    
        url = "http://tieba.baidu.com/f?"
        key = urllib.parse.urlencode({"kw": kw})
        
        #组合后的url示例:http://tieba.baidu.com/f?kw=lol
        url = url + key
        
        tiebaSpider(url, beginPage, endPage)  
    
    
            
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

      

  • 相关阅读:
    Sum of a Function(区间筛)
    (01背包)输出方案数
    删边求概率
    完全背包输出方案数(dp)
    二分
    Just Arrange the Icons(模拟)
    Balls of Buma(回文串)
    dp思想
    刷题-力扣-190. 颠倒二进制位
    刷题-力扣-173. 二叉搜索树迭代器
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/9301824.html
Copyright © 2011-2022 走看看