python爬虫:爬取中北大学贴吧的标题

import urllib.request
#引入urllib.request包,打开和浏览url中内容 
from bs4 import BeautifulSoup
'''
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,
通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序;
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非
文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了;
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。
beautifulsoup4库使用时是简写的bs4,解析这段代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的缩进格式的结构输出.
'''
import time
#这个模块提供各种与时间相关的函数

end_time = time.strftime('%Y-%m-%d,%H-%M-%S',time.localtime(time.time()))
#end-time中存储着本地的时间
'''
%Y-->带世纪的年份(十进制数)
%m-->月份(十进制数)[01,12]
%d-->十进制数格式的日期[01,31]
%H-->小时(24小时制) 十进制数[00,23]
%M-->分钟数(十进制数)[00,59]
%S-->秒数[00,59]
'''
'''
time.strftime(format[,t])
作用:将struct_time类型的时间转换为format参数指定格式的字符串。
参数:
format:指定转换时间的字符串格式。
t:struct_time类型的时间,如果不填默认为当前时间(即time.localtime()返回的时间)
返回值:指定格式的字符串。
'''
f = open('ZBtb-'+end_time+'.txt','a+',encoding='utf-8')
#打开一个一本地时间命名的文件
#“a+”:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。
#文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
#encoding规定追加文件的格式。
f.write("爬取时间:"+end_time+'/n')
'''
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。 
write()方法不会在字符串的结尾添加换行符('\n'): 
'''

print("***开始爬取数据***")
url = "https://tieba.baidu.com/f?kw=%D6%D0%B1%B1%B4%F3%D1%A7&fr=ala0&tpl=5"
#要请求的url,这里就是指中北大学贴吧的网址
html = urllib.request.urlopen(url).read()
'''
urlopen()方法可以实现最基本的请求的发起,但如果要加入Headers等信息,就可以利用Request类来构造请求。
使用方法为:urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)/
data必须是bytes(字节流)类型,如果是字典,可以用urllib.parse模块里的urlencode()编码/
headers是一个字典类型,是请求头。可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加。
可以通过请求头伪装浏览器,默认User-Agent是Python-urllib。要伪装火狐浏览器,可以设置User-Agent为Mozilla/5.0 (x11; U; Linux i686) 
Gecko/20071127 Firefox/2.0.0.11

read() 函数:逐个字节或者字符读取文件中的内容;
用法:files.read([size])
files 表示已打开的文件对象;size 作为一个可选参数,用于指定一次最多可读取的字符(字节)个数,如果省略,则默认一次性读取所有内容。
readline() 函数:逐行读取文件中的内容;
readlines() 函数:一次性读取文件中多行内容。
'''

soup = BeautifulSoup(html,"lxml")
#创建BeautifulSoup对象
'''
html :文本标记
lxml HTML 解析器
BeautifulSoup(markup, “lxml”)
速度快
文档容错能力强
'''
#print(soup.prettify())

all = soup.find_all("a",class_="j_th_tit")
"""
find_all()函数爬取所有符合条件的数据。
爬取标签<a>,class=class_="j_th_tit"的数据
"""
title = str(all).split('</a>')
#爬取的数据转化成字符串,再以‘</a>’分割,存储到title中
title.pop()
#pop()函数移除list中的一个元素默认最后一个

i = 0
for j in title:
    i+=1
    each1 = j.split('title="')[1]
    f.write('【标题'+str(i)+'】'+each1+'\n')
   
f.close()
#close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。
print("***爬取数据结束***")


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值