下面就来详细讲解一下“Python 制作糗事百科爬虫实例”的完整攻略:
1. 爬虫概述
爬虫(Web Crawler)是指互联网上按照一定规则自动抓取网页信息的程序。其核心功能是自动抓取网页,将需要的有用信息提取出来并进行分析处理。
2. 工具准备
- Python 3.x(开发语言)
- requests(网络请求库)
- BeautifulSoup(HTML 解析器)
- pyecharts(数据可视化库)
3. 实现过程
3.1 数据抓取
首先,我们需要抓取糗事百科的页面数据。以热门段子为例,糗事百科的热门段子页面 URL 是:http://www.qiushibaike.com/hot/page/1/
import requests
from bs4 import BeautifulSoup
url = 'http://www.qiushibaike.com/hot/page/1/'
# 伪装成浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
content = response.text
soup = BeautifulSoup(content, 'html.parser')
articles = soup.find_all('div', class_='article block untagged mb15')
3.2 数据提取
从 HTML 中提取出有用的信息,比如段子内容、作者、好笑度、评论数等等。
for article in articles:
# 段子内容
content = article.find('div', {'class': 'content'}).get_text(strip=True)
# 作者
author = article.find('span', {'class': 'sage'}).get_text(strip=True)
# 好笑度
stats = article.find('div', {'class': 'stats'})
vote = stats.find_all('span')[0].get_text(strip=True)
comment = stats.find_all('span')[1].get_text(strip=True)
# 打印结果
print('作者:', author)
print('好笑度:', vote)
print('评论数:', comment)
print('段子内容:', content)
print('='*60)
3.3 数据分析
将提取出来的数据进行分析处理,比如统计每个作者发的段子数量及对应的好笑度、评论数等等。
# 统计每个作者发的段子数量及对应的好笑度,评论数
data = {}
for article in articles:
author = article.find('span', {'class': 'sage'}).get_text(strip=True)
stats = article.find('div', {'class': 'stats'})
vote = int(stats.find_all('span')[0].get_text(strip=True))
comment = int(stats.find_all('span')[1].get_text(strip=True))
if author not in data:
data[author] = {'vote':vote, 'comment':comment, 'count':1}
else:
data[author]['vote'] += vote
data[author]['comment'] += comment
data[author]['count'] += 1
3.4 数据可视化
使用 pyecharts 进行数据可视化。
from pyecharts.charts import Bar
from pyecharts import options as opts
# 定义好笑度、评论数、段子数量三个列表
votes = []
comments = []
counts = []
# 从 data 字典中读取每个作者的数据,填充到对应的列表中
for author, info in data.items():
votes.append(info['vote'])
comments.append(info['comment'])
counts.append(info['count'])
# 分别绘制好笑度、评论数和段子数量三个柱状图
bar1 = (
Bar()
.add_xaxis(list(data.keys()))
.add_yaxis('好笑度', votes)
.set_global_opts(title_opts=opts.TitleOpts(title='段子吐槽大赏-好笑度'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),
yaxis_opts=opts.AxisOpts(name=''))
)
bar2 = (
Bar()
.add_xaxis(list(data.keys()))
.add_yaxis('评论数', comments)
.set_global_opts(title_opts=opts.TitleOpts(title='段子吐槽大赏-评论数'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),
yaxis_opts=opts.AxisOpts(name=''))
)
bar3 = (
Bar()
.add_xaxis(list(data.keys()))
.add_yaxis('段子数量', counts)
.set_global_opts(title_opts=opts.TitleOpts(title='段子吐槽大赏-段子数量'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),
yaxis_opts=opts.AxisOpts(name=''))
)
# 将三个柱状图组合在一起
bar = bar1.overlap(bar2).overlap(bar3)
# 渲染生成 HTML 文件,可在浏览器中查看
bar.render('qiushibaike.html')
其中,我们使用了 pyecharts 的 Bar()
函数,设置了横轴、纵轴和标题等各种参数,最终将三个柱状图组合在一起,生成了一个 HTML 文件,可以在浏览器中查看。
4. 示例说明
示例一
以抓取糗事百科为例,讲解了爬虫的基本实现过程,包括数据抓取、数据提取和数据分析等。通过使用 requests 和 BeautifulSoup 等库,实现了热门段子页面的数据抓取和提取。同时,通过使用 pyecharts 进行数据可视化,制作了好笑度、评论数和段子数量的柱状图,并将三个图形组合在一起,生成了一个 HTML 文件。
示例二
使用 Python 编写的爬虫程序可以不仅仅是抓取糗事百科的数据,还可以抓取其他网站的数据。比如抓取新浪选股页面的数据。
import requests
from bs4 import BeautifulSoup
url = 'http://money.finance.sina.com.cn/q/view/newFLJK.php?param=fund'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
content = response.text
soup = BeautifulSoup(content, 'html.parser')
tables = soup.find_all('table', class_='table_list')
for table in tables:
# 表头
ths = table.find_all('th')
for th in ths:
print(th.get_text(strip=True), end='\t')
print()
# 表格内容
trs = table.find_all('tr')[1:]
for tr in trs:
tds = tr.find_all('td')
for td in tds:
print(td.get_text(strip=True), end='\t')
print()
以上程序实现了抓取新浪选股页面的数据,并将数据输出到控制台。
5. 总结
以上实例说明了如何使用 Python 编写爬虫程序,并进行数据抓取、数据分析和数据可视化等操作。在实现爬虫的过程中,需要借助各种 Python 库,比如 requests、BeautifulSoup 和 pyecharts 等,可以极大地提高代码编写的效率和爬虫程序的运行速度。但是,在抓取网站数据时,需要注意遵守相关法律法规,不得侵犯他人的隐私权和知识产权,以及不得用于违法犯罪活动。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 制作糗事百科爬虫实例 - Python技术站