python爬取贴吧数据_Python爬取某贴吧第一页的所有帖子的标题、连接、作者,将数据储存到txt文件中...

学习网络爬虫的第二个程序:

#-*- coding:utf-8 -*-

#import re

import urllib

from bs4 import BeautifulSoup

import urlparse #处理url链接的库

import chardet #字符集检测

import sys #解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)

reload(sys)

sys.setdefaultencoding( "utf-8" )

"""

爬取某贴吧第一页的所有帖子的标题、连接、作者,将数据储存到txt文件中

"""

def get_content(url):

""" 获取页面源码"""

html = urllib.urlopen(url) #获取网站页面的地址

content = html.read() #将页面读取到content变量中

html.close() #关闭页面

#local = '/root/desktop/python/teiba.html'

#urllib.urlretrieve(url,local) #将页面源码下载的本地

#print chardet.detect(content) #检测网页的字符集,依据网页具体内容

return content

def get_author(info):

"""

提取帖子里面的作者

"""

soup = BeautifulSoup(info) #转换成soup对象

all_author = soup.find_all('div',class_="louzhubiaoshi j_louzhubiaoshi") #提取有关与作者的那行代码

for author in all_author:

return author['author'] #提取作者的名字

def get_tiezi(info):

"""

提取帖子的标题和链接

"""

soup = BeautifulSoup(info) #转换成soup对象

all_title = soup.find_all('a',class_="j_th_tit")

#all_author = soup.find_all('span',class_="tb_icon_author ")

#class_="..."中的class带下划线是因为class是python的一个关键字,他还是表示class="..."

print len(all_title) #打印获取的链接个数

#print len(all_author)

f = file("data.txt","w+") #创建并打开文件,文件路径和这个Python执行文件的路径一样

for title in all_title:

#print title['title']

url_tiezi = urlparse.urljoin("http://tieba.baidu.com",title['href']) #合并为全路径

#print type(url_tiezi)

info1 = get_content(url_tiezi) #进入帖子里面

author = get_author(info1) #找到作者

if author == None: #处理识别不了的作者

author = "I don't know the author!"

print author

li = [str(title['title']+"\n"),url_tiezi+"\n",str(author+"\n\n")] #转换为字符串

f.writelines(li) #储存到文件中

f.close() #关闭文件

return 0

info = get_content('http://tieba.baidu.com/f?kw=%B3%A4%BD%AD%B4%F3%D1%A7&fr=home') #贴吧地址

print get_tiezi(info)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值