糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > python天涯帖子_python 网络爬虫(一)爬取天涯论坛评论

python天涯帖子_python 网络爬虫(一)爬取天涯论坛评论

时间:2023-05-27 08:01:19

相关推荐

python天涯帖子_python  网络爬虫(一)爬取天涯论坛评论

我是一个大二的学生,也是刚接触python,接触了爬虫感觉爬虫很有趣就爬了爬天涯论坛,中途碰到了很多问题,就想把这些问题分享出来,

都是些简单的问题,希望大佬们以宽容的眼光来看一个小菜鸟😄,这也是我第一次写博客,代码有哪里写的不好的地方,需要改进的地方希

望大家也可以帮我指出。

用到的包有requests - BeautSoup

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

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

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

defgetHtmlText(url):pass

defgetHtmlList(list,url,main_url):pass

defgetHtmlInfo(list,fpath):pass

defmain():pass

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

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

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

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

第二步:代码的具体实现

#encoding:utf8

importrequestsfrom bs4 importBeautifulSoup

#获取一个url,通过requests.get()方法,获取页面的信息,这是一个获取url资源的模块defgetHtmlText(url):try:

r=requests.get(url)

r.encoding=r.apparent_encoding

html=r.text

soup= BeautifulSoup(html,'html.parser')returnsoupexcept:print("解析网页出错")

#获取一个url,调用第一个函数解析财经论坛页面,获取到其中的子帖子的url,存放在list中defgetHtmlList(list,url,main_url):try:

soup=getHtmlText(url)

managesInfo= soup.find_all('td',attrs={'class':'td-title faceblue'})for m inrange(len(managesInfo)):

a= managesInfo[m].find_all('a')//获取帖子的位置for i ina:try:

href= i.attrs['href']

list.append(main_url+href)//把帖子的url存放在list中except:continue

except:print("获取网页失败")

#把list中的url通过for循环一个一个解析页面,获取其中我们想要的内容,然后把得到的内容存放在指定的电脑的位置里defgetHtmlInfo(list,fpath):for i inlist:

infoDict={}//初始化存放帖子要获取的全部信息的字典

authorInfo=[]//初始化存放帖子评论的作者的信息的列表

comment=[]//初始化存放帖子评论的信息的列表try:

soup=getHtmlText(i)if soup ==""://如果页面不存在则跳过,继续获取continueInfo= 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 inauthor:

authorInfo.append(m.text)//把帖子中的评论的作者的信息存放到列表里

author= soup.find_all('div',attrs={'class':'bbs-content'})for m inauthor:

comment.append(m.text)//把帖子的评论的信息存放在列表里for m inrange(len(authorInfo)):

key= authorInfo[m]+'\n'value= comment[m]+'\n'infoDict[key]=value//把评论的作者的信息跟评论的内容以键值对的形式存储起来

#把获取到的信息存放在自己指定的位置

with open(fpath,'a',encoding='utf-8')as f:for m ininfoDict:

f.write(str(m)+'\n')

f.write(str(infoDict[m])+'\n')except:continue

defmain():

main_url= ''develop_url= '/list-develop-1.shtml'ulist=[]

fpath= r'E:\tianya.txt'getHtmlList(ulist,develop_url,main_url)

getHtmlInfo(ulist,fpath)

main()//运行main函数

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

总结:

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

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

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

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

如果觉得《python天涯帖子_python 网络爬虫(一)爬取天涯论坛评论》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。