赞
踩
用到的包有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]+'\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函数
好了,这个代码就写完了,我来总结下我在写这个代码中遇到的问题。
总结:
这个代码很简单,但是其中的一些细节我一开始没有处理好
在写第三个函数的时候,把获取到的信息全部存放在字典中,在调试中发现获取到的信息有很多重复的,
后来发现是没有初始化每个列表里的信息。因为是循环存放信息的,读取完一个帖子的信息之后要把存放
信息的列表初始化,要不会重复输出之前存入的信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。