最近学习大数据分析,发现很多库都是python的,于是学学python来抓一些数据进而分析。贴吧算是数据来源之一。
from bs4 import BeautifulSoup #引入BeatifulSoup库
import requests #引入requests库,用来进行http请求和响应获取
f = open("application.txt",'w+') #打开准备写入抓取的信息的txt文件,w+是追加写入模式
url = 'http://tieba.baidu.com/p/******* #要爬取的贴吧首页地址
r = requests.get(url) #用requests的get方法向url地址网页提出请求,发回信息放入r
r.encoding = 'utf-8' #显示要求responds用utf-8编码,同样是防止中文乱码
r = r.text.encode('utf-8') #获取返回信息的文本,同样用utf-8编码
soup = BeautifulSoup(r, 'lxml') #用lxml解释器格式化文本
urls = soup.select('#thread_theme_5 > div.l_thread_info > ul > li.l_pager.pager_theme_4.pb_list_pager > a') #获取本贴的页面url的列表
print(urls.__len__()) #获取总共的页面数,贴吧有可能抽风,每次获取的数目都不一样,实在不行可以人工指定了个最大的数
pageNo = urls.__len__()
#pageNo = 10 #人工指定最大页面数
for i in range(1, pageNo, 1):#从第一页到最后一页
url = 'http://tieba.baidu.com/p/*******?pn='+str(i) #获取每页的url地址
print(url) #控制台打印页面地址看是否正确
r = requests.get(url)#获取url对应的页面
r.encoding = 'utf-8'
r = r.text.encode('utf-8')#页面信息编码
soup = BeautifulSoup(r, 'lxml')#用lxml解释器格式化页面信息
for link in soup.find_all('div', 'p_content'): #用find_all方法查找div名字为p_content 的内容,取不同部分的内容填入不同的div名字,但是有时候提取不到内容,待研究
context = link.get_text().encode('gb18030')#获取的内容编码,必须是gb18030不然就是中文乱码
#print f, context
f.write(context + "\t" + "\n")#插入制表符和换行符并写入txt文件
f.close()#以上是for循环,循环完毕后txt文件关闭。随后在本py文件的同文件下就可以查看txt文件内容了