zoukankan      html  css  js  c++  java
  • 【Python爬虫案例学习】Python爬取天涯论坛评论

    用到的包有requests - BeautSoup

    我爬的是天涯论坛的财经论坛:‘http://bbs.tianya.cn/list.jsp?item=develop’

    它里面的其中的一个帖子的URL:‘http://bbs.tianya.cn/post-develop-2279340-1.shtml’

    第一步:定义了三个函数跟一个main函数

    def getHtmlText(url):
        pass
    def getHtmlList(list,url,main_url):
       pass
    def getHtmlInfo(list,fpath):
        pass
    def main():
        pass
    

    第一个函数是获取一个url,通过requests.get()方法,获取页面的信息,这是一个获取url资源的模块

    第二个函数是获取一个url,调用第一个函数解析财经论坛页面,获取到其中的子帖子的url,存放在list中

    第三个函数是把list中的url通过for循环一个一个解析页面,获取其中我们想要的内容,然后把得到的内容存放在指定的电脑的位置里

    main函数里就是调用这几个函数

    第二步:代码的具体实现

    # encoding:utf8
    import requestsfrom bs4 import BeautifulSoup
    '''
    遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
    '''
    #获取一个url,通过requests.get()方法,获取页面的信息,这是一个获取url资源的模块
    def getHtmlText(url):
        try:
            r = requests.get(url)
            r.encoding = r.apparent_encoding
            html = r.text
            soup = BeautifulSoup(html,'html.parser')
            return soup
        except:
            print("解析网页出错")
    
    
    #获取一个url,调用第一个函数解析财经论坛页面,获取到其中的子帖子的url,存放在list中
    def getHtmlList(list,url,main_url):
        try:
            soup = getHtmlText(url)
            managesInfo = soup.find_all('td',attrs={'class':'td-title faceblue'})       
            for m in range(len(managesInfo)):
                a = managesInfo[m].find_all('a')//获取帖子的位置
                for i in a:
                    try:
                        href = i.attrs['href']
                        list.append(main_url+href)//把帖子的url存放在list中
                        
                    except:
                        continue
        except:
            print("获取网页失败")
    
    #把list中的url通过for循环一个一个解析页面,获取其中我们想要的内容,然后把得到的内容存放在指定的电脑的位置里
    def getHtmlInfo(list,fpath):
        for i in list:
            infoDict = {}//初始化存放帖子要获取的全部信息的字典
            authorInfo = []//初始化存放帖子评论的作者的信息的列表
            comment = []//初始化存放帖子评论的信息的列表
            try:
                soup = getHtmlText(i)
                if soup ==""://如果页面不存在则跳过,继续获取
                    continue
                Info = soup.find('span',attrs={'style':'font-weight:400;'})
                title = Info.text//获取帖子的标题
                infoDict.update({'论坛话题:  ':title})//把帖子的标题内容存放到字典中
                author = soup.find_all('div',attrs={'class':'atl-info'})
                for m in author:
                    authorInfo.append(m.text)//把帖子中的评论的作者的信息存放到列表里
                author = soup.find_all('div',attrs={'class':'bbs-content'})
                for m in author:
                    comment.append(m.text)//把帖子的评论的信息存放在列表里
                for m in range(len(authorInfo)):
                    key = authorInfo[m]+'
    '
                    value = comment[m]+'
    '
                    infoDict[key] = value//把评论的作者的信息跟评论的内容以键值对的形式存储起来
                #把获取到的信息存放在自己指定的位置
                with open(fpath,'a',encoding='utf-8')as f:
                    for m in infoDict:
                        f.write(str(m)+'
    ')
                        f.write(str(infoDict[m])+'
    ')
            except:
                continue
    def main():
        main_url = 'http://bbs.tianya.cn'
        develop_url = 'http://bbs.tianya.cn/list-develop-1.shtml'
        ulist = []
    
        fpath = r'E:	ianya.txt'
        getHtmlList(ulist,develop_url,main_url)
        getHtmlInfo(ulist,fpath)
    main()//运行main函数
    

    好了,这个代码就写完了,我来总结下我在写这个代码中遇到的问题。

    总结:

    这个代码很简单,但是其中的一些细节我一开始没有处理好

    在写第三个函数的时候,把获取到的信息全部存放在字典中,在调试中发现获取到的信息有很多重复的,

    后来发现是没有初始化每个列表里的信息。因为是循环存放信息的,读取完一个帖子的信息之后要把存放

    信息的列表初始化,要不会重复输出之前存入的信息。

  • 相关阅读:
    詩与胡說张爱玲
    dragscroll 鼠标拖动滚动页面 userjs
    鼠标拖动控制页面滚动 (可运用于全屏触摸设备)
    给Webbrowser 添加用户脚本
    .net 4 环境调用 .net 2 编译的DLL
    webservice远程测试显示 “测试窗体只能用于来自本地计算机的请求”
    解决WebBrowser.DocumentCompleted事件的多次调用
    能够播放地球上现有的几乎所有格式 - VLC – 支持鼠标手势的播放器
    使 WebBrowser 更简单的插入、调用执行脚本, 可安装 jQuery 脚本的 C# 开源代码 IEBrowser
    “暂时没有对您所在的地区提供下载和试听服务”的解决办法
  • 原文地址:https://www.cnblogs.com/Pythonmiss/p/11298456.html
Copyright © 2011-2022 走看看