题外话:

《Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元》相信过去BTC的人,信不信未来的PI,了解一下,唯一一个高度与之持平的项目

前篇全片都是生硬的理论使用,今天就放个静态爬取的实例让大家体验一下BeautifulSoup的使用,了解一些背后的原理。

顺便在这引入静态网页的概念——静态网页是指一次性加载所有内容的网页,爬虫一次请求便能得到所有信息,对爬虫非常友好,适合练手

豆瓣top250电影信息爬取


我们来爬取每部电影的图片,名称,导演演员,类型,评分,和它的一句话总结,

继续对<li>标签进行分析,又发现信息又在<div class="info">标签里,而这标签只存在于<li>标签中,其它地方不存在,这样可以用find_all()方法把他们全部分离出来。

这里不选择<li>标签是它没有唯一性,电影以外的内容也有<li>标签



布置好伪装后就可以开始根据每个<div class="info">标签进行信息筛选了:

  • 图片链接是<div class="info">的上上个兄弟标签<div class="pic">的孙子<img>的src属性的值
  • 电影名有多个,都在<div class="hd">标签里,用get_text()把它们串起来
  • 导演演员是<p class>标签的第一段字符串
  • 类型是<p class>标签的第二段字符串
  • 评分和评分人数都在<div class="star">标签里,又用get_text()串起来
  • 一句话总结直属于<span class="inq">标签
  • html中的&NBSP(实际上是小写,这里大写避免markdown识别)对应字符串中的\xa0,可用replace方法替换掉
url = 'https://movie.douban.com/top250'
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}
r=requests.get(url,headers=headers)
soup = BeautifulSoup(r.text,'lxml')for each in soup.find_all('div',class_='info'):img_url = each.previous_sibling.previous_sibling.a.img['src']#图片链接'''with open('*.jpg','wb') as img:#还可以顺便下载回来,名字自起img.write(requests.get(img_url,headers=headers).content)'''title=each.find('div',class_='hd').get_text(strip=True).replace('\xa0','')#标题actor = list(each.find('p',class_='').strings)[0].strip().replace('\xa0','')#导演演员type_ = list(each.find('p',class_='').strings)[1].strip().replace('\xa0','')#类型score = each.find('div',class_='star').get_text('/',strip=True)#评分及人数quote = each.find('span',class_='inq').string#一句话总结print([img_url,title,actor,type_,score,quote])#这里只简单打出来看下,怎样存储由你来决定

但是这样只有25部电影啊,是的,'https://movie.douban.com/top250'指向第一页,我们现在只爬了一页,其实还有9页还没爬啊,这是就要构造网址了。

  我们点到第二页,发现网址变成了https://movie.douban.com/top2...,第三页start条件值变成50,我们可以得出结论,每下一页,start条件值就加25。第一页start=0,第二页start=25.....第十页start=225。这样就可以循环构造网页并爬取了,这交给读者实现
  下面笔者提供另一种思路:网页不是有下一页的按钮吗,右键检查一下,发现它已经包含了要构造的部分了,是一个属性值,提取出来接到原网址上即得到下一页的网址,这样能完全爬取所有页数,不用像上面一样设置循环次数。

贴上完整代码

import requests
from bs4 import BeautifulSoupurl = 'https://movie.douban.com/top250'
with open('douban.txt', 'w', encoding='utf-8') as f:while url:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}r = requests.get(url, headers=headers)soup = BeautifulSoup(r.text, 'lxml')for each in soup.find_all('div', class_='info'):img_url = each.previous_sibling.previous_sibling.a.img['src']title=each.find('div', class_='hd').get_text(strip=True).replace('\xa0', '')actor = list(each.find('p', class_='').strings)[0].strip().replace('\xa0', '')#将生成器list化后索引,strip()去除两边空格再用空字符替换&nbsptype_ = list(each.find('p', class_='').strings)[1].strip().replace('\xa0', '')score = each.find('div', class_='star').get_text('/', strip=True)if each.find('span', class_='inq'):#注意有部电影没有总结,也就没有<span class="inq">标签这里用if检测一下防止None使用string方法报错quote = each.find('span', class_='inq').stringelse:quote = '没有总结哦'print([img_url, title, actor, type_, score, quote])try:#到最后一页时没有下一页按钮,会报TypeError,这时用try语句让url=None使while循环停止url = 'https://movie.douban.com/top250' + soup.find('span', class_='next').a['href']except TypeError:url = None

本实例的筛选方法已经讲的很细致了,几乎提及了BeautifulSoup的所有方法,希望大家能通过此实例能加深对BeautifulSoup的理解,然后自己手打一些爬虫出来,小的十几行多的几十行都可以,爬贴吧什么的都可以。

还是那句话“只看不实践的程序员不是好程序员

下一篇应该会将正则表达式,更加强大也更加难的信息匹配方法
下下篇了解一下动态爬取?

Python爬虫自学之第(③)篇——实战:requests+BeautifulSoup实现静态爬取相关推荐

  1. Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称

    Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称   这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询   这一个案例体现的点主要是xpat ...

  2. 零基础入门python爬虫之《青春有你2》选手信息爬取

    零基础入门python爬虫之<青春有你2>选手信息爬取 完成<青春有你2>选手图片爬取,生成选手图片的绝对路径并输出,统计爬取的图片总数量.使用工具:requests模块.Be ...

  3. 【爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】

    [爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩] https://b23.tv/TIoy6hj

  4. 【【数据可视化毕业设计:差旅数据可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】-哔哩哔哩】 https://b23.tv/iTt30QG

    [[数据可视化毕业设计:差旅数据可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩]-哔哩哔哩] https://b23.tv/iTt30QG ht ...

  5. python爬虫之Scrapy介绍八——Scrapy-分布式(以爬取京东读书为示例)

    Scrapy-分布式(scrapy-redis)介绍 1 Scrapy-分布式介绍 1.1 Scrapy-redis工作原理 1.2 Scrapy-redis 安装和基本使用 1.2.1 安装 1.2 ...

  6. python爬虫豆瓣电影我不是药神的评价_Python | 爬取《我不是药神》电影热门短评...

    1.目标数据: 数据来源: 目标描述: 建立一个爬虫项目,抓取豆瓣上对电影<我不是药神>的热门短评,采集字段包括: 用户昵称 评论时间 觉得有用的人数 短评内容 2.开始爬虫 采集策略: ...

  7. 【python爬虫自学笔记】(实战)----爬取猫眼电影榜单Top100

    目的:爬取猫眼电影榜单TOP100的信息并保存在文档中. 查看网站结构,确定思路: 首先请求网页的地址为maoyan.com/board/4,电影信息的内容包含在一个个dd标签之中,分析dd标签中的内 ...

  8. Python爬虫入门实例五之淘宝商品信息定向爬取(优化版)

    文章目录 写在前面 一.爬取原页面 二.编程思路 1.功能描述 2.程序的结构设计 三.编程过程 1.解决翻页问题 2.编写getHTMLText()函数 3.编写parsePage()函数 (1). ...

  9. Python爬虫入门教程 4-100 美空网未登录图片爬取 1

    简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,老鸟你自动绕过就可以了,或者带带我也行. ...

最新文章

  1. boost::geometry::enrich_intersection_points用法的测试程序
  2. 关于使用WindowsUpdate 或 Windows 自动升级时碰到的 svchost.exe 进程 CPU 资源占用过高的问题的相关信息...
  3. keil MDK编译器警告和错误详解
  4. geek_享受How-To Geek用户样式脚本的好处
  5. 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义
  6. airpods2怎么查正品 ios11系统_拼多多AirPods2开箱评测,4种办法教你验真假,10个AirPods技巧教你玩...
  7. python和c混合编程 gil,如何在python中使用C扩展来解决GIL
  8. Android开发笔记(四十六)手机相关事件
  9. 修改Linux系统分区后挂载问题
  10. 计算机硬盘存绝密,教您创建自己的绝密磁盘
  11. 光纤跳线接口_你知道光纤接头、尾纤、终端盒的作用与接法嘛?读懂这篇足够...
  12. IPv6规模部署及专项督查工作全国电视电话会议
  13. Zynga公布2019年第三季度财务业绩
  14. 学习编程需要英语很好吗?
  15. VB.NET自制动态桌面
  16. 如何解决打开浏览器跳转MSN中国页面
  17. 若依专题 线程池配置
  18. NVIDIA Tesla T4 检修纪录之基础安装问题
  19. Java Web应用开发_04javaWeb基础
  20. 手机拍照模糊怎么办?拍摄低像素照片如何修复清晰?

热门文章

  1. [css] 说说你对jpg、png、gif的理解,分别在什么场景下使用?有使用过webp吗?
  2. [css] 你有用过table布局吗?说说你的感受
  3. 前端学习(2529):搭建中央管理
  4. 前端学习(1959)vue之电商管理系统电商系统之通过路由加载分类参数
  5. 前端学习(294):rem小实例
  6. java学习(86):Interage方法compareto,parseint,intvalue
  7. plsql连接oracle11g怎么配置,怎么使用plsql怎么连接64位Oracle11g数据库?
  8. vue中使用better-scroll实现滑动
  9. CSS之Multi-columns的column-gap和column-rule
  10. stylus之注释(Comments)