Datawhale爬虫(第5期)入门第三练||提取丁香园指定帖子的回复!

学习beautifulsoup库:

BeautifulSoup 库是一个非常流行的Python模块。通过BeautifulSoup库可以轻松的解析 Requests 库请求的网页,并把网页源代码解析为 Soup 文档,以便过滤数据!
小试牛刀:我们上个简单的学习案例说话
import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/71.0.3578.98 Safari/537.36'
}

res = requests.get('https://www.mi.com/', headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')  # 对返回的结果进行解析
print(soup.prettify())

返回结果如下图所示:
看上去与 Requests 库请求返回的网页源代码类似,但通过BeautifulSoup库解析得到的Soup文档按照标准缩进格式的结构输出,为结构化的数据,为数据的过滤提取做好准备!

在这里插入图片描述

BeautifulSoup 库官方推荐使用lxml 作为解析器,因为效率更高一点!
解析得到的Soup 文档可以使用 find()find_all() 方法以及 selector 方法定位需要的元素了! find()find_all() 两个方法用法相似,BeautifulSoup 文档中对这两个方法的定义是这样的:
find_all(tag, attibutes, recursive, text, limit, keywords)
find(tag, attibutes, recursive, text, keywords)
常用的是前两个参数, 熟练运用这两个参数,就可以提取出想要的网页信息。
1.find_all() 方法
soup.find_all('div', "item")    # 查找div标签,class="item"
soup.find_all('div', class='item')
soup.find_all('div', attrs={"class": "item"})   # attrs 参数定义一个字典参数来搜索包含特殊属性的tag
2. find 方法
find() 方法与find_all() 方法类似,只是find_all() 方法返回的是文档中符合条件的所有tag,是一个集合(class ‘bs4.element.ResultSet’),find() 方法返回的一个Tag(class ‘bs4.element.Tag’)

接下来进行今天的学习任务:

任务:使用beautifulsoup提取下面丁香园论坛的特定帖子的所有回复内容,以及回复人的信息。
import requests
from bs4 import BeautifulSoup
import time

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/71.0.3578.98 Safari/537.36',
    'Cookie': 'JUTE_SESSION_ID=65e9b5e2-89e0-4f47-b555-7ba7581a86b9; JUTE_TOKEN=c75248ab-1737'
              '-4b86-8217-5309083c5e82; DXY_USER_GROUP=3; __auc=eee9c4a71693eb8cd2ef89b9900; '
              '__utmc=1; __utmz=1.1551535495.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);'
              ' cms_token=4b5f7dab-8eac-4d73-906a-f562b4d5a6d4; __utma=1.751487223.1551535495.'
              '1551535495.1551617162.2; _ga=GA1.2.751487223.1551535495; _gid=GA1.2.1641632121.'
              '1551617165; JUTE_BBS_DATA=11bed98a657dd2ea59de66a9dc915d537d9adc54c98cee4c6c81e30c'
              '4b90bcf401bdaa905194236e12851d5c4293fc6292204fc799d1b85306af5aa2ece3122f5a4caecc0e'
              '5a766950abc74aab767cbc; CMSSESSIONID=1CFD38E1B136170AE1E0874FEB7EBFE3-n2; __utmb=1.'
              '24.9.1551620070024; JUTE_SESSION=33a9674e1d8b2c29f862aa1c1986c95afee06c45de1cbdc63f'
              'a2531132293a3352748c3a1232c1e4dbefe7c23be2c2b5f49b4f6e05d078a1ab3e13a81b9c728ac72ae'
              'de0e9156459',
}


def get_detail_info(url):
    """
    提取下面丁香园论坛的特定帖子的所有回复内容,以及回复人的信息。
    :return:
    """
    wb_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(wb_data.text, 'html.parser')
    for data in soup.find_all('tbody'):
        try:
            all_reply = data.find("td", class_="postbody").get_text(strip=True)  # 爬取所有回复内容
            print(all_reply)

            name = data.find('div', class_='auth').get_text(strip=True)   # 爬取所有回帖人的名字
            print(name)
        except:
            pass


if __name__ == '__main__':
    get_detail_info('http://www.dxy.cn/bbs/thread/626626#626626')
    time.sleep(4)
代码效果如下,格式显示的比较乱,而且不知道为什么输出了两次信息,没搞明白!

在这里插入图片描述

总结:今天这个任务对我而言还是有难度的,证明了自己学的还不太好,下去我在看看,试试!记录每一天坚持努力的自己,共勉!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值