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

题外话:

《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的理解,然后自己手打一些爬虫出来,小的十几行多的几十行都可以,爬贴吧什么的都可以。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 如何解决css加载字体跨域的问题?

[css] 如何解决css加载字体跨域的问题&#xff1f; 刚才碰到一个css加载字体跨域问题&#xff0c;记录一下。 站点的动态请求与静态文件请求是不同的域名的。站点的域名为 www.domain.com&#xff0c;而静态文件的域名为 st.domain.com。 问题&#xff1a; 页面中加载css文件&…

django cookie、session

1.cookie (1)什么是cookie? 服务器让浏览器保存在浏览器本地的键值对 (2) 为什么要有cookie&#xff1f; 因为http协议无状态&#xff0c;每一次访问请求没有任何关系&#xff0c;无法保存状态 (3)cookie的特点&#xff1f; cookie是由服务器给浏览器设置的 在同一个浏览器中访…

Python爬虫自学之第(④)篇——强大的正则表达式,re模块

题外话&#xff1a; 《Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元》相信过去BTC的人&#xff0c;信不信未来的PI&#xff0c;了解一下&#xff0c;唯一一个高度与之持平的项目 如果把BeautifulSopu比喻成通过线索一步步接近目标的侦探的话&#xff0c;那么正则…

[css] 当使用@font-face的时候,为什么src中要加入local呢?

[css] 当使用font-face的时候&#xff0c;为什么src中要加入local呢&#xff1f; 网上的说法片面不一&#xff0c;CSDN和掘金都没见到正确回复&#xff0c;然后我在MDN找到了比较明确的说法。MDN的 font-face 这是一个CSS 规则 &#xff0c;它允许网页开发者为其网页指定在…

Python爬虫自学之第(⑤)篇——爬取某宝商品信息

题外话&#xff1a; 《Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元》相信过去BTC的人&#xff0c;信不信未来的PI&#xff0c;了解一下&#xff0c;唯一一个高度与之持平的项目 能看到这里说明快进入动态网页爬取了&#xff0c;在这之前还有一两个知识点要了解&…

Vue通信、传值的多种方式,详解

Vue通信、传值的多种方式&#xff0c;详解 转自&#xff1a;https://blog.csdn.net/qq_35430000/article/details/79291287 一、通过路由带参数进行传值 ①两个组件 A和B,A组件通过query把orderId传递给B组件&#xff08;触发事件可以是点击事件、钩子函数等&#xff09; this.…

[css] 你有使用过font-size-adjust属性吗?说说它的作用是什么?

[css] 你有使用过font-size-adjust属性吗&#xff1f;说说它的作用是什么&#xff1f; 很少用。 实际应用场景&#xff1a; 实际应用场景在指定字体时&#xff0c;出于安全考虑&#xff0c;人们通常会为一个元素指定多种字体&#xff0c;希望当首选字体不可用时&#xff0c;让…

Python代写CSSE1001/7030 python程序作业、代做python CSSE1001/7030程序作业、 代写CSSE1001/7030 python 作业...

Python代写CSSE1001/7030 python程序作业、代做python CSSE1001/7030程序作业、 代写CSSE1001/7030 python 作业UnoAssignment 2CSSE1001/7030Semester 2, 2018Version 1.0.110 marksDue Friday 21st September, 2018, 20:30IntroductionThis assignment follows a programming…

selenium等待定位标签加载完再执行

遇到的问题描述 我们经常会碰到用selenium操作页面上某个元素的时候&#xff0c; 需要等待页面加载完成后&#xff0c; 才能操作。 否则页面上的元素不存在&#xff0c;会抛出异常。 比如&#xff1a; 一个动态网页使用了ajax的异步加载&#xff0c;我们需要等待元素加载…

[css] body{height:100%}和html,body{height:100%}有什么区别?为什么html要设置height:100%呢,html不就是整个窗口吗?

[css] body{height:100%}和html,body{height:100%}有什么区别&#xff1f;为什么html要设置height:100%呢&#xff0c;html不就是整个窗口吗&#xff1f; html是body的父级&#xff0c;在缺少了父级的宽高之后&#xff0c;如果给body设置一个渐变色背景的话将不会正常显示。个…

数据类型的操作

时间数据类型 1.mongo中存储时间大多为ISOData 2.获取当前时间   1. 使用new Date() 自动生成当前时间   2. 使用 ISODate() 生成当前时间   3. 获取计算机时间生成时间格式字符串 Date() 3.ISODate()   功能&#xff1a; 生成mongodb时间存储类型   参数&#xff1a…

python+selenium 浏览器无界面模式运行

以Chrome浏览器为例&#xff1a; 方法一&#xff1a; from selenium.webdriver import Chrome, ChromeOptionsopt ChromeOptions() # 创建Chrome参数对象 opt.headless True # 把Chrome设置成可视化无界面模式&#xff0c;windows/Linux 皆可 driv…

[css] 你所理解的css高级技巧有哪些?

[css] 你所理解的css高级技巧有哪些&#xff1f; 各种动画效果&#xff0c;能用css的都可以不去用js写的&#xff0c;对我来说就很高级个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣…

[css] 举例说明跟字体相关的属性有哪些

[css] 举例说明跟字体相关的属性有哪些 font-size&#xff1a;字体大小 font-weight&#xff1a;字体粗细 font-family&#xff1a;字体类型 color&#xff1a;字体颜色 等等个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很…

python 文件读写(追加、覆盖)

很明了的一个常用参数图标&#xff1a; 更像细的一个参数说明&#xff1a; 由于文件读写时都有可能产生IOError&#xff0c;一旦出错&#xff0c;后面的f.close()就不会调用。所以&#xff0c;为了保证无论是否出错都能正确地关闭文件&#xff0c;我们可以使用try ... finally来…

职场篇:失败之后

前言 当我写下这个题目之后&#xff0c;我想到了一首歌词"长大以后&#xff0c;我只能奔跑&#xff0c;我多害怕 黑暗中跌倒 "&#xff0c;我不由得哼起这首歌&#xff0c;一种心痛孜然而生。 我也想到了一本小说《飞升之后》&#xff0c;讲述主人公飞升后&#xf…

h5页面调用cmd命令并隐藏cmd弹窗

/*** 通过js调用cmd命令利用ffmpeg实现录屏或者录像功能 ***/ var cmd new ActiveXObject("WScript.Shell");/*命令参数说明cmd.exe /c dir 是执行完dir命令后关闭命令窗口。cmd.exe /k dir 是执行完dir命令后不关闭命令窗口。cmd.exe /c start dir 会打开一个新窗…

[css] 字体的粗细的属性是用哪一个?它有哪些属性值?

[css] 字体的粗细的属性是用哪一个&#xff1f;它有哪些属性值&#xff1f; font-size指的应该是字体大小&#xff0c;字体粗细应该是font-weight&#xff0c;值有normal,bold,bolder,lighter,inherit,也可以自己定义100~900之间的某一个值个人简介 我是歌谣&#xff0c;欢迎…

前端知识点总结

1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。(通俗易懂的来讲讲DOM、两个节点之间可能存在哪些关系以及如何在节点之间任意移动) DOM: Document Object Module, 文档对象模型。 节点的关系:父(parent)、子(child)和同胞(sibling)等节…

C# windows定时服务+服务邮箱发送

protected override void OnStart(string[] args){timer1 new System.Timers.Timer();// timer1 new System.Timers.Timer(24 * 60 * 60 * 1000);timer1.Interval 3000; //设置计时器事件间隔执行时间timer1.Elapsed new System.Timers.ElapsedEventHandler(timer1_Elapse…