[ケーススタディ]ワールドフォーラムのコメントをクロールのPython Pythonの爬虫類

BeautSoup - 使用されるパッケージは、要求を持っています

私はワールドフォーラム金融フォーラムの終了を登っ:「http://bbs.tianya.cn/list.jsp?item=develop

それはのURLの柱の一つ内側にある「http://bbs.tianya.cn/post-develop-2279340-1.shtml

最初のステップ:主な機能と3つの機能を定義します

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へのアクセスを、解析し、呼び出し、

第三の機能は、お使いのコンピュータの上の指定した場所に保存されたコンテンツをループ用のページ、我々が入手したいの内容を解析してURLをリストアップして、取得することです

主な機能は、これらの関数を呼び出すことです

ステップ2:特定の実装コード

# 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]+'\n'
                value = comment[m]+'\n'
                infoDict[key] = value//把评论的作者的信息跟评论的内容以键值对的形式存储起来
            #把获取到的信息存放在自己指定的位置
            with open(fpath,'a',encoding='utf-8')as f:
                for m in infoDict:
                    f.write(str(m)+'\n')
                    f.write(str(infoDict[m])+'\n')
        except:
            continue
def main():
    main_url = 'http://bbs.tianya.cn'
    develop_url = 'http://bbs.tianya.cn/list-develop-1.shtml'
    ulist = []

    fpath = r'E:\tianya.txt'
    getHtmlList(ulist,develop_url,main_url)
    getHtmlInfo(ulist,fpath)
main()//运行main函数

さて、このコードが終了し、次は私が遭遇したこのコードの問題を書いてまとめます。

要約:

このコードは非常にシンプルですが、詳細の一部は、私が最初に対処していませんでした

辞書に保存されているすべての情報を取得するための第三の機能を記述する場合は、重複した多くの情報を持って取得を試運転中に見つかりました、

その後、各リストの情報を初期化していないことが判明。それは情報の流通の後に格納されているため、完全な情報は、記事を読んで保存する必要があります

情報の初期化リストは、我々は以前に、出力に格納されている情報を繰り返してはなりません。

おすすめ

転載: www.cnblogs.com/Pythonmiss/p/11298456.html