前言

前面利用正则表达式爬取猫眼电影top100,这两天刚学了Beautiful Soup,今天用它来写一遍。还不熟悉Beautiful Soup的同志,可以看看我的前一篇博客:python3 网络爬虫开发实战-使用Beautiful Soup

获取第一页

import requests
from requests.exceptions import RequestExceptiondef get_one_page(url):'''获取第一页的响应'''try:# 异常处理headers = { #定义请求头'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0','Cookie':'__mta=244153658.1609735789043.1609814345631.1609903887876.9; uuid_n_v=v1; uuid=44FD87D04E4811EBB586F7EF3F3BEBB881E6A67E34BF46848671B5C44D132AF8; _lxsdk_cuid=176cbbad8c4c8-0687fad5143e0b-3e604000-144000-176cbbad8c4c8; _lxsdk=44FD87D04E4811EBB586F7EF3F3BEBB881E6A67E34BF46848671B5C44D132AF8; _csrf=e80757462cd1516a77cd1805be934c54f7d4e90601451188280cb41fd6c4871a; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1609735788,1609764730,1609812449,1609903888; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1609903888; _lxsdk_s=176d5bfd5c7-e23-d69-9d%7C%7C2'}r = requests.get(url, headers=headers)if r.status_code==200:return r.textreturn Noneexcept RequestException:return Nonedef main():url = 'http://maoyan.com/board/4'html = get_one_page(url)print(html)main()

解析页面

我们用专门的HTML 解析库——Beautiful Soup 来做这件事
首先看看响应内容(这里只截取了一部电影的)

 <dd><i class="board-index board-index-1">1</i><a href="/films/1200486" title="我不是药神" class="image-link" data-act="boarditem-click" data-val="{movieId:1200486}"><img src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/image/loading_2.e3d934bf.png" alt="" class="poster-default" />   <img data-src="https://p0.meituan.net/movie/414176cfa3fea8bed9b579e9f42766b9686649.jpg@160w_220h_1e_1c" alt="我不是药神" class="board-img" /></a><div class="board-item-main"><div class="board-item-content"><div class="movie-item-info"><p class="name"><a href="/films/1200486" title="我不是药神" data-act="boarditem-click" data-val="{movieId:1200486}">我不是药神</a></p><p class="star">主演:徐峥,周一围,王传君</p>
<p class="releasetime">上映时间:2018-07-05</p>    </div><div class="movie-item-number score-num">
<p class="score"><i class="integer">9.</i><i class="fraction">6</i></p></div></div></div></dd>

可以看到每部电影的内容都是一个 dd 节点,首先可以选出所有 dd 节点

soup = Beautiful(html, 'lxml')
items = soup.find_all(name='dd')
for film in items:

这时候的 items 是一个列表,每个元素都是一整个 dd 节点的内容,每个元素都是 bs4.element.Tag 类型。我们只需要看一个 dd 节点,进行所需内容的提取,其余的就可以利用 for 循环来解决了。

排名
<i class="board-index board-index-1">1</i>

看响应里的这一段,这个 i 节点是 dd 节点里的第一个 i 节点,因此可以直接取:

film.i.string
图片链接
<img src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/image/loading_2.e3d934bf.png" alt="" class="poster-default" />   <img data-src="https://p0.meituan.net/movie/414176cfa3fea8bed9b579e9f42766b9686649.jpg@160w_220h_1e_1c" alt="我不是药神" class="board-img" />

可以看到,第二个 img 节点的 data-src 属性就是我们需要的链接!
可以注意到这里有个值为 board-img 的 class,利用它来定位这个 img 节点,然后获取 data-src 属性的值

film.find(name='img',class_='board-img').attrs['data-src']
电影名
<p class="name"><a href="/films/1200486" title="我不是药神" data-act="boarditem-click" data-val="{movieId:1200486}">我不是药神</a></p>

关注到这里有个 p 节点,这个 p 节点是 dd 节点中的第一个 p 节点,可以直接用find()!

film.find(name='p').string
# 如果不是第一个p节点,就需要用 class 属性值 name 来进行限制,确保选中它
# film.find(name='p',attrs={'class':'name'}).string
# 可以简化下成下面这条
# film.find(name='p',class_='name').string
# 当然,你要是想从 a 节点的 title 属性提取出电影名也行,虽然麻烦了一点,就当开阔思路了
# film.find(name='p').a.attrs['title']
主演
<p class="star">主演:徐峥,周一围,王传君</p>

这里的 class 属性值 star 可以唯一限定这个 p 节点!取到这个 p 节点后,直接string就可以啦

film.find(name='p', class_='star').string
上映时间
<p class="releasetime">上映时间:2018-07-05</p>    </div>

这里的 class 属性值 releasetime 可以唯一限定这个 p 节点!取到这个 p 节点后,直接string就可以啦

film.find(name='p', class_='releasetime').string
评分
<p class="score"><i class="integer">9.</i><i class="fraction">6</i></p>

利用 值为integer 的这个 class 以及 值为fraction 这个 class

film.find(name='i', class_='integer').string + film.find(name='i', class_='fraction').string
解析页面的代码
def parse_one_page(html):soup = BeautifulSoup(html, 'lxml')items = soup.find_all('dd')for film in items:yield {'index': film.i.string,'img': film.find(name='img',class_='board-img').attrs['data-src'],'name': film.find(name='p', class_="name").string,'star': film.find(name='p', class_="star").string.strip()[3:],'time': film.find(name='p', class_="releasetime").string.strip()[5:],'score': film.find(name='i', class_="integer").string.strip() + film.find(name='i', class_="fraction").string.strip()}

后面写入文件什么的就可以参见前面使用正则写猫眼爬虫的博文啦:传送门

全部代码

import requests
from bs4 import BeautifulSoup
from requests.exceptions import RequestException
import json
import timedef get_one_page(url):try:headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0','Cookie':'__mta=244153658.1609735789043.1609814345631.1609903887876.9; uuid_n_v=v1; uuid=44FD87D04E4811EBB586F7EF3F3BEBB881E6A67E34BF46848671B5C44D132AF8; _lxsdk_cuid=176cbbad8c4c8-0687fad5143e0b-3e604000-144000-176cbbad8c4c8; _lxsdk=44FD87D04E4811EBB586F7EF3F3BEBB881E6A67E34BF46848671B5C44D132AF8; _csrf=e80757462cd1516a77cd1805be934c54f7d4e90601451188280cb41fd6c4871a; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1609735788,1609764730,1609812449,1609903888; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1609903888; _lxsdk_s=176d5bfd5c7-e23-d69-9d%7C%7C2'}r = requests.get(url,headers=headers)if r.status_code==200:return r.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html):soup = BeautifulSoup(html, 'lxml')items = soup.find_all('dd')for film in items:yield {'index': film.i.string,'img': film.find(name='img',class_='board-img').attrs['data-src'],'name': film.find(name='p', class_="name").string,'star': film.find(name='p', class_="star").string.strip()[3:],'time': film.find(name='p', class_="releasetime").string.strip()[5:],'score': film.find(name='i', class_="integer").string.strip() + film.find(name='i', class_="fraction").string.strip()}def write_to_file(content):with open('result.txt', 'a', encoding='utf-8') as f_obj:f_obj.write(json.dumps(content, ensure_ascii=False)+'\n')def main(offset):url = 'http://maoyan.com/board/4?offset=' + str(offset)html = get_one_page(url)for x in parse_one_page(html):write_to_file(x)if __name__=='__main__':for i in range(10):main(offset=i*10)time.sleep(1)

各位读者老爷们,如果觉得有帮助,记得点赞哦

抓取猫眼电影排行-基于Beautiful Soup相关推荐

  1. 00_抓取猫眼电影排行TOP100

    前言: 学习python3爬虫有一段时间了,熟悉了爬虫的一些基本原理和基本库的使用,本次就准备利用requests库和正则表达式来抓取猫眼电影排行TOP100的相关内容. 1.本次目标: 爬取猫眼电影 ...

  2. python3网络爬虫开发实战-抓取猫眼电影排行(正则表达式版)

    抓取猫眼电影排行 目前没有学习HTML解析库,这里先选用正则表达式作为解析工具 目标 提取出猫眼电影top100的电影名称.时间.评分.图片等信息.提取的站点URL为http://maoyan.com ...

  3. 利用requests库抓取猫眼电影排行

    文章目录 1.抓取目标 2.准备工作 3.抓取分析 4.抓取首页 5.正则提取 6.写入文件 7.整合代码 8.分页爬取 9.运行结果 10.本节代码 最近刚开始了解爬虫,学习了一下基本库的使用.跟着 ...

  4. 爬虫之抓取猫眼电影排行

    一 需求 我们要提取出猫眼电影TOP100的电影名称.时间.评分.图片等信息,提取的站点URL为http://maoyan.com/board/4,提取的结果会以文件形式保存下来. 二 技术手段 利用 ...

  5. 正则表达式和requests抓取猫眼电影排行

    一.目的 利用学习的requests库和正则表达式抓取猫眼电影的排行榜的名称.时间.评分和图片等信息.提取站点的地址:https://maoyan.com/board/4 二.准备工作 确保开发环境安 ...

  6. Requests与正则表达式抓取猫眼电影排行!

    本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...

  7. Python3网络爬虫实战-27、Requests与正则表达式抓取猫眼电影排行

    本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...

  8. 【Python】Python3网络爬虫实战-27、Requests与正则表达式抓取猫眼电影排行

    本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...

  9. 【Python3网络爬虫开发实战】3-基本库的使用-4抓取猫眼电影排行

    本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容.requests比urllib使用更加方便,而且目前我们还没有系统学习HTML解析库,所以这里就选用正则表达式来作为 ...

最新文章

  1. 测试几款STC下载电路
  2. 关于c中的inline
  3. 以太网输入输出处理的实现
  4. jQuery中.html(“xxx”)和.append(xxx)的区别和不同
  5. 开发悬赏任务兼职系统运营版源码,仿蚂蚁帮扶众人帮平台
  6. delphi dispose释放内存的方法
  7. java中的工厂模式_java中工厂模式详解和使用方法
  8. Install Eclipse 3.7 Indigo and configure Eclipse
  9. sql 行政区划关联查询优化_民政部:四季度继续开展优化行政区划设置研究
  10. JavaScript 学习-42.jQuery 提交表单 submit() 方法
  11. 《区块链开源技术需求调研报告》拍了拍你
  12. codeforces 696C C. PLEASE(概率+快速幂)
  13. 2022CTFSHOW菜狗杯部分MISC(一)
  14. c++中new是否会自动初始化
  15. 绝绝子!这些技巧真方便
  16. 西门子plc博图与优傲UR机器人进行Profinet通讯,s7-1200/1500 与UR机器人通讯,实际应用案例使用中
  17. ESP8266-NodeMCU物联网原理介绍以及说明(新手入门)
  18. 如何在没有流量的情况下做微信直播呢?答案是建立社群
  19. 【Python项目】Python基于tkinter实现笔趣阁小说下载器(附源码)
  20. 数据结构——校园导游系统

热门文章

  1. 二、CSS 精灵(雪碧图、精灵图)
  2. dns和命令行清除缓存
  3. 最新elasticsearch7(三、jdbc链接sql查询)
  4. 设计原则——设计模式基础
  5. Linux安装达梦8国产数据库
  6. vue3中的$refs的使用
  7. Chromium多线程模型设计和实现分析
  8. 生成Mac icns 和Windows ico
  9. 关于屏幕背光无法达到标准值
  10. 如何让一句话木马绕过waf的检测 ?