您的位置:首页 > 编程语言 > Python开发

python获取网页信息练习01 获取国匠城日课板块话题信息

2018-11-02 00:28 141 查看

python获取网页信息练习01 获取国匠城日课板块话题信息


完成的人生中第一个网页信息获取练习,好开心

本次练习的主要内容

获取国匠城网站日课话题板块相关信息,编号、主题、日期、时间、回复数、浏览数、博主、博主粉丝数
主要用到os,requests和bs4模块

起始设置

起始网址、存储目录设置
主要利用os.chdir更改文件路径,利用os.makedirs新建存储目录,并且提前利用textFile.write(‘提前写入要存储的信息作为数据表头’)

// 如果文件夹已存在,不报错,继续执行
os.makedirs('国匠城日课话题',exist_ok=True)

获取一级网址信息

利用requests获取首页信息,并转为response对象以后期关键字选择

获取二级网址

观察一级网址的html,发现二级网址的ID编号都在一个标签内,并且新建一个空的列表以存储这些ID数字
观察到二级网址为http://bbs.caup.net/read-htm-tid-“ID编号”-page-1.html,所以采用字符串相加获得所有二级网址url,并放在一个序列中,以便后期使用

获取每个主题的信息

根据每个id属性或者关键标签筛选出需要的信息

保存每个主题的信息

利用文件读写功能,写到第一步新建的txt中

循环

根据设置要下循环一级网址的数量进行循环

完整代码

// An highlighted block
#! python3
#获取国匠城日课话题

import os,bs4,requests

#设置起始页面,保存目录、信息
URL_01='http://bbs.caup.net/thread-htm-fid-452-page-1.html'
os.chdir('F:\\Python\\项目练习\\获取数据练习')
os.makedirs('国匠城日课话题',exist_ok=True)
textFile=open('国匠城日课话题\\国匠城日课话题.txt','w')
textFile.write('编号,主题,日期,时间,回复数,浏览数,博主,粉丝数\n')
textFile.close()
PageNum=int(input('请输入下载页面数:'))
PageNum_0=1 #初始

while PageNum_0<=PageNum:
#获取一级网址url及信息
print('正在解析第%d页的信息' %PageNum_0)
URL_01_res=requests.get(URL_01)
URL_01_res.raise_for_status()
URL_01_soup=bs4.BeautifulSoup(URL_01_res.text,'lxml')

#获取二级网址url
URL_02=URL_01_soup.select('tbody')
if URL_02 == []:
print('未搜索到有效信息')
else:
URL_02_Id=[]
for i in range(len(URL_02)):
URL_02_Attr=URL_02[i].attrs
if 'normalthread_' in URL_02_Attr.get('id'):
URL_02_Id.append(URL_02_Attr.get('id')[13:])
else:
pass
#print(URL_02_Id)
print('共找到'+str(len(URL_02_Id))+'个日课主题')

URL_02_text=[]
for i in URL_02_Id:
text='http://bbs.caup.net/read-htm-tid-%s-page-1.html' %i
URL_02_text.append(text)
#print(URL_02_text)

#获取每个主题的信息
for i in URL_02_text:
res=requests.get(i)
res.raise_for_status()
resSoup=bs4.BeautifulSoup(res.text,'lxml')

title_text=resSoup.select('#thread_subject')[0].getText()
if ':' in title_text:
Title=title_text.split(':')[0] #编号
Text=title_text.split(':')[1] #主题
else:
Title=title_text
Text=title_text

content_text=resSoup.select('.mtn')[0].getText().strip('\n').split(' ')
Date=content_text[0] #日期
Time=content_text[1] #时间
Reply=content_text[2] #回复数
Look=content_text[3] #浏览数

author_text=resSoup.select('[class="author-bar-hd mbm cl"]')[0].getText().split('\n')
author_Name=author_text[3] #博主
author_Funs=author_text[7][4:6] #粉丝数

#保存每个主题的信息
textFile=open('国匠城日课话题\\国匠城日课话题.txt','a')
textFile.write(Title+','+Text+','+Date+','+Time+','+Reply+','+Look+','+author_Name+','+author_Funs+'\n')
print('正在写入'+Title+'的相关信息')
textFile.close()

#循环
print('第%d页的信息已获取完成' %PageNum_0)
PageNum_0 += 1
URL_01='http://bbs.caup.net/thread-htm-fid-452-page-'+str(PageNum_0)+'.html'

print('此次任务全部完成')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: