Beautiful Soup的用法(七):分析实例

关于基本Beautiful Soup 的基本使用方法在前面都已经有介绍过了,Beautiful Soup 的点比较多,在项目中是如何使用Beautiful Soup 对抓取到的网页进行分析,并提取关键的字段,这篇文章的目的就在此。

分析页面

经常看电影的同学都会关注电影的排行榜,在对电影的分析前,先得得到电影的数据。有很多的网站提供了对电影的排名,猫眼也有提供如下的数据:

在这里插入图片描述

先使用 requests 获取网页数据:

url = "http://maoyan.com/board/4?offset=0"
headers = {}  
headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0'  
headers['Accept-Encoding'] = 'gzip, deflate'  
headers['Content-Type'] = 'text/html; charset=utf-8'  

maoyan_response = requests.get(url,headers=headers)

关于headers是如何选取的,简单的方式是使用浏览器的调试,打开浏览器的web开发工具选择网络,重新刷下网站,找到http://maoyan.com/board/4?offset=0 的地址,查看网站的请求头。

在这里插入图片描述

假设我的项目中需要获取到电影的排名,电影的名字,电影的主演,电影的上映时间,电影的评分

在这里插入图片描述

使用浏览器自带的工具对网页进行分析,从页面来开,每一页中有10部电影,通常我们需要找到这10部电影的一个中标签,这个标签中包含着这10电影的代码。

在这里插入图片描述

好,我们找到了<dl class="board-wrapper">

使用Beautiful Soup 进行抓取,

pinyin_soup = BeautifulSoup(maoyan_response.text, "lxml")  
board_wrapper_tag = pinyin_soup.find('dl',{'class':'board-wrapper'})

dl中包含了10个的dd,每个dd里面包含着每一部电影的各种信息,解析dd就能解析出我们需要的属性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOx3Dujc-1649318200034)(/images/kuxue/blog/movie_tags.png)]

board_dd_tags = board_wrapper_tag.select('dd')
for board_dd_tag in board_dd_tags:
	print board_dd_tag.find('i',{'class':re.compile('board-index*')}).text.strip()
	print board_dd_tag.find('p', {'class': 'name'}).find('a').text.strip()
	print board_dd_tag.find('p', {'class': 'star'}).text.strip()
	print board_dd_tag.find('p', {'class': 'releasetime'}).text.strip()
	print board_dd_tag.find('p', {'class': 'score'}).text.strip()

通过dd里的属性,解析出电影的排名,电影的名字,电影的主演,电影的上映时间,电影的评分

完整的参考代码如下
#!/usr/bin/python
#coding=utf-8

import requests
from bs4 import BeautifulSoup
import re


for i in range(0,10):

    url = "http://maoyan.com/board/4?offset=%d"%(i*10)
    headers = {}
    headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0'
    headers['Accept-Encoding'] = 'gzip, deflate'
    headers['Content-Type'] = 'text/html; charset=utf-8'

    maoyan_response = requests.get(url,headers=headers)

    if maoyan_response.status_code == 200:
        pinyin_soup = BeautifulSoup(maoyan_response.text, "lxml")
        board_wrapper_tag = pinyin_soup.find('dl',{'class':'board-wrapper'})
        if board_wrapper_tag is not None:
            board_dd_tags = board_wrapper_tag.select('dd')
            for board_dd_tag in board_dd_tags:
                print board_dd_tag.find('i',{'class':re.compile('board-index*')}).text.strip()
                print board_dd_tag.find('p', {'class': 'name'}).find('a').text.strip()
                print board_dd_tag.find('p', {'class': 'star'}).text.strip()
                print board_dd_tag.find('p', {'class': 'releasetime'}).text.strip()
                print board_dd_tag.find('p', {'class': 'score'}).text.strip()
                print

输出结果为:

1
霸王别姬
主演:张国荣,张丰毅,巩俐
上映时间:1993-01-01(中国香港)
9.6

2
肖申克的救赎
主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿
上映时间:1994-10-14(美国)
9.5

我们默认了总的页数为10页,每一页是通过offset=进行跳转,BeautifulSoup 中在查找属性是用的比较多的是findfind_allselect 也和find_all有同样的用法,但是在查找的时候findfind_all配合起来,方便很多。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值