前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >web爬虫-搞一波天涯论坛帖子练练手

web爬虫-搞一波天涯论坛帖子练练手

作者头像
XXXX-user
修改2019-07-30 10:28:52
1.9K0
修改2019-07-30 10:28:52
举报
文章被收录于专栏:不仅仅是python不仅仅是python

今天我们将要学习如何使用BeautifulSoup库来抓取网站。BeautifulSoup是一个很好的工具,用于解析HTML代码并准确获取所需的信息。因此,无论您是从新闻网站,体育网站,还是在线商店的价格中提取新闻等,BeautifulSoup和Python都可以帮助您快速轻松地完成这些工作。

接下来先看看BeautifulSoup的基本使用,我在桌面上新建一个test.html内容如下:

该文件的html源代码如下:

接下来我们使用BeautifulSoup来进行操作解析这个文件。首先需要安装BeautifulSoup库,lxml解析器库用于解析html,html5lib库用于像访问浏览器页面一样访问网页:

安装requests库,用于请求web地址:

开始编码操作,首先我们导入BeautifulSoup和requests包:

代码语言:javascript
复制
from bs4 import BeautifulSoup
import requests

接下来打开上面新建的test.html获取到源代码信息,注意这里的编码选择utf-8,然后初始化BeautifulSoup,并使用lxml进行解析:

代码语言:javascript
复制
with open('test.html',encoding='utf-8') as html_file:
  soup = BeautifulSoup(html_file,'lxml')

我们打印一下soup看下输出的内容:

代码语言:javascript
复制
print(soup)
代码语言:javascript
复制
<!DOCTYPE html>
<html class="no-js" lang="">
<head>
<title>一个简单的web网页</title>
<meta charset="utf-8"/>
<link href="css/normalize.css" rel="stylesheet"/>
<link href="css/main.css" rel="stylesheet"/>
</head>
<body>
<h1 id="site_title">测试网页</h1>
<hr/>
<div class="article">
<h2><a href="article_1.html">文章1</a></h2>
<p>文章1内容</p>
</div>
<hr/>
<div class="article">
<h2><a href="article_2.html">文章2</a></h2>
<p>文章2内容</p>
</div>
<hr/>
<div class="footer">
<p>底部信息</p>
</div>
<script src="js/vendor/modernizr-3.5.0.min.js"></script>
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>
</body>
</html>

这是一个标准的html源代码输出内容。接下来我们获取title标签,并输出:

代码语言:javascript
复制
title = soup.title
print(title)
代码语言:javascript
复制
<title>一个简单的web网页</title>

获取一下title标签中的文本:

代码语言:javascript
复制
title_text = soup.title.text
print(title_text)
代码语言:javascript
复制
一个简单的web网页

获取div标签:

代码语言:javascript
复制
div = soup.div
print(div)
代码语言:javascript
复制
<div class="article">
<h2><a href="article_1.html">文章1</a></h2>
<p>文章1内容</p>
</div>

使用find方法获取div并且指定div的样式class名字为footer的div:

代码语言:javascript
复制
foot_div = soup.find('div',class_='footer')
print(foot_div)
代码语言:javascript
复制
<div class="footer">
<p>底部信息</p>
</div>

使用find_all方法获取所有div并且指定div的样式class名字为article的div,获取到标题和内容:

代码语言:javascript
复制
for article in soup.find_all('div',class_='article'):
  headline = article.h2.a.text
  print(headline)
  summary = article.p.text
  print(summary)
代码语言:javascript
复制
文章1
文章1内容
文章2
文章2内容

以上呢就是BeautifulSoup的基本使用方法了,接下来步入正题,我们开始搞一波天涯论坛的帖子,然后将帖子的标题、链接、作者、点击率、回复率、回复时间信息保存到一个csv的文件中去。

这里我们去爬取天涯论坛-旅游论坛-辽阔东北板块为例,地址为:

http://bbs.tianya.cn/list-874-1.shtml,内容截图大致如下:

分析网页html源代码可知,这是一个table表格组成的数据列表,我们只需要解析td中的内容提取出来放入到csv中即可:

我们新建一个py3_tianya.py文件:

代码语言:javascript
复制
#引入相关的包
from bs4 import BeautifulSoup
import requests
import csv
#定义一个类天涯 初始化需要的字段属性
class Tianya:
  title = ''
  link = ''
  author = ''
  click = ''
  replay = ''
  replaytime = ''

#使用requests库访问论坛地址,获取到html源代码
source = requests.get('http://bbs.tianya.cn/list-874-1.shtml').text
#初始化BeautifulSoup,并使用lxml进行解析
soup = BeautifulSoup(source,'lxml')
#定义天涯根地址之后获取链接拼接使用
root_site ='http://bbs.tianya.cn'
#创建csv文件进行写入
csv_file = open('tianya_scrape.csv', 'w')
csv_writer = csv.writer(csv_file)
#写入csv标题头内容
csv_writer.writerow(['标题', '链接', '作者','点击','回复','回复时间'])
#查出所有表格中tr标签
for index,article in enumerate(soup.find_all("tr")):
#实例化天涯对象
  ty = Tianya()
  #index为0的tr过滤掉,因为是表格标题头部分
  if index > 0 :
   #使用find_next()方法获取所有的属性信息
    ty.title = article.find_next('td').text.strip()
    ty.link = root_site+article.find_next('td').a['href'].strip()
    ty.author = article.find_next('td').find_next('td').text
    ty.click = article.find_next('td').find_next('td').find_next('td').text
    ty.replay = article.find_next('td').find_next('td').find_next('td').find_next('td').text
    ty.replaytime = article.find_next('td').find_next('td').find_next('td').find_next('td').find_next('td').text
    #写入csv文件中
    csv_writer.writerow([ty.title, ty.link, ty.author,ty.click,ty.replay,ty.replaytime])
#关闭文件流    
csv_file.close()

执行代码会生成一个tianya_scrape.csv文件,内容截图如下:

今天的初始web爬虫就到这里,我们下节见了

关注公号

下面的是我的公众号二维码图片,欢迎关注。

yale记公众号

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yale记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关注公号
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档