爬取百度贴吧(二) --爬取并清洗出所需内容

本文介绍了如何使用Python的BeautifulSoup库爬取并清洗百度贴吧的网页内容,包括通过Tag对象获取HTML标签、String对象处理文本内容、BeautifulSoup对象处理整个文档以及Comment对象处理注释。讲解了如何定位并提取特定标签内的文本和属性值,例如通过筛选div和span标签获取帖子的标题、回复数和最后回复时间。文章还提供了官方文档和其他优质资源链接。
摘要由CSDN通过智能技术生成

一、爬取网页源代码

1、下载网页的html源代码

from bs4 import BeautifulSoup

def handlechapter(url):
    response = urllib.request.urlopen(url)
    html = response.read().decode('utf-8')
    return html

html = handlechapter(url)    #url为某贴吧首页的链接
                             #这里为url = 'http://tieba.baidu.com/f?kw=%E4%B8%9C%E5%8C%97%E5%A4%A7%E5%AD%A6%E7%A7%A6%E7%9A%87%E5%B2%9B%E5%88%86%E6%A0%A1&ie=utf-8&pn=0'

注意网页的源代码为utf-8编码

2、将html文件转换为python文件

url_soup = BeautifulSoup(html, 'html.parser')

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment

【1.Tag类对象】

    即html中的标签,BeautifulSoup对象(以上面代码中的url_soup为例)可以直接在后面接上某种标签的名称,得到的对象是该种标签在这段html中的第一个实例。

    比如对于print(url_soup.h)

                             >>> <h class="...">...</h> 

(bs里的html对象是可打印的,打印出来就是html原文)

    每个Tag类对象都有两个属性,name和attrs。

    name就是标签的名字,而attrs是个字典,里面记录了所有这个tag的属性值。比如有tag是<h1 class="space-seo space-meta" name="testname">HELLO</h1>

    其name就是u'h1',而attrs是{u'class':[u'space-seo',u'space-meta'],u'name':u'testname'}  //注意区别tag对象的name属性和写在attrs里面的name属性的区别,另外所有被存到变量里的html内容全部都变成了unicode对象。在print的时候可以指定encode,默认encode是utf-8。还有,所有class属性都默认都被解析成一个列表,即便只有一个class值,也会成为[u'class_value']

    当然,在定位到Tag对象之后可以获取查看其属性值,另一方面,也可以对其属性值等进行修改,修改完了之后就是存在内存中的这个变量里面的,最终可以输出成文件的形式。

【2.String对象】  //selenium用的是text来指代标签内部的文本内容,而bs用的是string。而且对于<div>这种本身不带文本带后辈节点可能带文本的标签两者意义不同。selenium中的.text会带出来所有后辈节点中的文本,而bs中的这个.string返回的是None

    String对象用于代表每个元素所含的文字部分,在标签后面加上.string即可调用

    注意,某个Tag对象的子节点以及子节点里面的内容都不算进string,当一个元素(比如<div>这种)里面只有子节点,本身没有文字的话,得到的就是None。

【3.BeautifulSoup对象】

    指代整个文档的对象。可以视为是<html>的对象。其实之前创建的BeautifulSoup对象soup,就是指代整个html文档

【4.comment对象】

    用于代表某个元素内的注释

二、清洗出想要的数据

先上一段单个帖子的格式:

<li class=" j_thread_list clearfix" data-field="{&quot;id&quot;:5935765954,&quot;author_name&quot;:&quot;zero2crayon&quot;,&quot;author_nickname&quot;:&quot;\ud83c\udf6dzero\ud83c\udf7c&quot;,&quot;author_portrait&quot;:&quot;8ffe7a65726f32637261796f6ef3a4&quot;,&quot;first_post_id&quot;:122696355566,&quot;reply_num&quot;:6,&quot;is_bakan&quot;:null,&quot;vid&quot;:&quot;&quot;,&quot;is_good&quot;:null,&quot;is_top&quot;:null,&quot;is_protal&quot;:null,&quot;is_membertop&quot;:null,&quot;is_multi_forum&quot;:null,&quot;frs_tpoint&quot;:null}">
    <div 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值