外语网站制作如何做自己的网站
爬虫入门学习(四)BeautifulSoup学习与实战
- 1 学习BeautifulSoup基本使用
- 2 项目实战 ——不登录爬取丁香园论坛的回复信息
- 2.1 目标
- 2.2 思路
- 2.3 完整代码
1 学习BeautifulSoup基本使用
大家可以参考我之前的一篇文章学习笔记——Beautiful Soup库的安装与基本使用方法和官方文档。
大家可以从以下角度来考虑对于BeautifulSoup的使用。
- Step.1 BeautifulSoup是基于标签的,所以我们第一步要准确定位到我们需要信息所在的标签。
- Step.2 从定位的标签中提取我们需要的信息(一般在属性或者在string中)
- Step.3 对于提取数据的简单处理
2 项目实战 ——不登录爬取丁香园论坛的回复信息
2.1 目标
爬取丁香园论坛http://www.dxy.cn/bbs/thread/626626#626626上的回复内容。
说明:因为不登录只能爬取到4条。
2.2 思路
- 第一步准确定位到回复信息所在的标签
发现我们需要的信息都在<td class="postbody”>中,所以定位到这个标签。
ls = soup.find_all("td", class_ = "postbody")
- 第二步提取信息
我们需要的信息都在string中,所以直接用get_text()方法就好。其中’\n’的作用是用’\n’分隔不同的标签文本,保证和原网页相同的格式输出(本质就是实现换行);strip=True的作用跟字符串中的strip()方法一样。
ls[i].get_text('\n', strip=True)
2.3 完整代码
说明:因为这部分后续还要完善,所以数据没有过多处理。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
"""
@author: Jock
"""import requests
from bs4 import BeautifulSoup as bs
import time# get_html_text(url)获取网页信息
def get_html_text(url):try:r = requests.get(url) # 爬取完整的网页数据r.raise_for_status() # 如果状态不是200,引发HTTPError异常return r.text # 以字符串的形式返回爬取的网页内容except:print("访问出错")return "" # 发生异常,返回空字符串# extract_data(data)提取网页内容
def extract_data(data):soup = bs(data, 'html.parser')# 列表ls_ms回复信息ls_ms = []ls = soup.find_all("td", class_ = "postbody")n = len(ls)for i in range(n):try:ls_ms.append(ls[i].get_text('\n', strip=True))except:print('出错')continuereturn ls_ms# 主函数
def main():url = 'http://www.dxy.cn/bbs/thread/626626#626626'data = get_html_text(url)ls_ms = extract_data(data)n = len(ls_ms)print('【问题】:' + ls_ms[0])for i in range(1,n):print('【回复'+ str(i) + '】是:', end='')print(ls_ms[i])# 测试时间
def count_spend_time(func):start_time = time.time()func()end_time = time.time()time_dif = (end_time - start_time)second = time_dif%60minute = (time_dif//60)%60hour = (time_dif//60)//60print('spend ' + str(hour) + 'hours,' + str(minute) + 'minutes,' + str(second) + 'seconds')if __name__ == '__main__':count_spend_time(main)