立即注册

编程论坛

广告联系qq1031180668广告位
查看: 454|回复: 0

[python] 批量爬取贴吧页面数据

[复制链接]
  • ta_mind
    擦汗
    2019-3-27 07:25
  • classn_01: 72 classn_02

    [LV.6]常住居民II

    1021

    主题

    1742

    帖子

    3558

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3558

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2018-7-17 16:53:30 | 显示全部楼层 |阅读模式
    首先我们创建一个python文件, tiebaSpider.py,我们要完成的是,输入一个百度贴吧的地址,比如:
    发现规律了吧,贴吧中每个页面不同之处,就是url最后的pn的值,其余的都是一样的,我们可以抓住这个规律。
    简单写一个小爬虫程序,来爬取百度LOL吧的所有网页。
    • 先写一个main,提示用户输入要爬取的贴吧名,并用urllib.parse.urlencode()进行转码,然后组合url,假设是python吧,那么组合后的url就是:http://tieba.baidu.com/f?kw=python
    需要导入的模块:
    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    import os[/color]
    [color=#333333]import urllib.request

    主函数:
    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    #模拟main函数
    if __name__=="__main__":
    
        kw=input("请输入要爬取的贴吧名称:")
        beginPage=int(input("请输入起始页:"))
        endPage=int(input("请输入终止页:"))
        url="http://tieba.baidu.com/f?"
        key=urllib.parse.urlencode({"kw":kw})
        url=url+key
        print(url)
        tiebaSpider(url, beginPage, endPage)


    • 接下来,我们写一个百度贴吧爬虫接口,我们需要传递3个参数给这个接口, 一个是main里组合的url地址,以及起始页码和终止页码,表示要爬取页码的范围。

    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    def tiebaSpider(url, beginPage, endPage):
        """
                作用:负责处理url,分配每个url去发送请求
                url:需要处理的第一个url
                beginPage: 爬虫执行的起始页面
                endPage: 爬虫执行的截止页面
            """
        for page in range(beginPage-1,endPage):
            pn=(page)*50
            filename="第"+str(page+1)+"页.html"
            # 组合为完整的 url,并且pn值每次增加50
    
            fullurl=url+"&pn"+str(pn)
            print(fullurl)
    
            # 调用loadPage()发送请求获取HTML页面
            html=loadPage(fullurl,filename)
    
            # 将获取到的HTML页面写入本地磁盘文件
            writeFile(html,filename)



    endPage+1是因为第一页的pn值为0 之后每页的值才会加50。

    • 我们已经之前写出一个爬取一个网页的代码。现在,我们可以将它封装成一个小函数loadPage,供我们使用。

    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    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()


    • 最后如果我们希望将爬取到了每页的信息存储在本地磁盘上,我们可以简单写一个存储文件的接口。
    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    def writeFile(html,filename):
        """
             作用:保存服务器响应文件到本地磁盘文件里
             html: 服务器响应文件
             filename: 本地磁盘文件名
         """
        print("正在储存"+filename)
        filename=GetDesktopPath()+"\\"+filename
        print(filename)
        with open(filename,"w+b") as f:
            f.write(html)


    GetDesktopPath是我们自己写的一个函数,用来获取windows桌面目录,方便我们把获取到的源码写到桌面。
    函数源码:
    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    def GetDesktopPath():
        return os.path.join(os.path.expanduser("~"), 'Desktop')



    这样一个批量爬取贴吧页面数据的爬虫程序就完成了。

    批量爬取贴吧页面数据

    批量爬取贴吧页面数据

    批量爬取贴吧页面数据

    批量爬取贴吧页面数据







    不积跬步,无以至千里
    游客
    回复
    您需要登录后才可以回帖 登录 | 立即注册

    手机版|Archiver|小黑屋|sitemap| 从零开始,编程论坛 - 一个单纯的编程学习交流论坛 ( 豫ICP备15032706号 )

    GMT+8, 2019-7-21 18:52 , Processed in 1.113875 second(s), 27 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表