学习python爬虫笔记(1)
什么是爬虫?
爬虫为以一定规则,在网络中自动获取信息并储存的脚本或程序。
所需工具
- python2.7
- python第三方模块-requests
python2.7安装方法不再赘述
requests模块安装方法参考此处
基础知识
我们日常所看到浏览器所展现的网页实际上是一系列html css js代码组成的,浏览器以一定的规则将这些代码渲染成你所看到的这些内容。
以最简化的方式来说,当你敲入一个网址并按下回车时,发生的事情是浏览器对这个网址对应的服务器发出了一个请求,服务器返回相应的代码段,最后浏览器渲染出一个网页。
爬虫的工作原理便是类似于此,通过对你想抓取的网址发出请求,得到返回的代码并对此进行解析,进而得到想要的内容。
本节目的
爬取b站首页的视频相关内容
实践
import re
import requests
html = requests.get(url = "https://www.bilibili.com")
print html.content
输出结果为(由于过长,节选部分)
<div class="groom-module"><a href="/video/av13379383" target="_blank" title="【一人全役】幻想万华镜 永夜异变之章 中篇(日配)"><div class="lazy-img"><img alt="【一人全役】幻想万华镜 永夜异变之章 中篇(日配)" src=""></div><div class="card-mark"><p class="title">【一人全役】幻想万华镜 永夜异变之章 中篇(日配)</p><p class="author">up主:vivian198808</p><p class="play">播放:3.7万</p></div></a><div class="watch-later-trigger w-later"></div></div><div class="groom-module"><a href="/video/av13324761" target="_blank" title="【东方MV / 4K高清重置】东方Celeb ~ABUNAI SISTERS~【Innocent Key】"><div class="lazy-img"><img alt="【东方MV / 4K高清重置】东方Celeb ~ABUNAI SISTERS~【Innocent Key】" src=""></div><div class="card-mark"><p class="title">【东方MV / 4K高清重置】东方Celeb ~ABUNAI SISTERS~【Innocent Key】</p><p class="author">up主:伊吹小秋</p><p class="play">播放:2.9万</p></div></a><div class="watch-later-trigger w-later"></div></div><div class="groom-module"><a href="/video/av13383690" target="_blank" title="【LOL】阿狸的娇喘让人听了根本把持不住啊"><div class="lazy-img"><img alt="【LOL】阿狸的娇喘让人听了根本把持不住啊" src=""></div><div class="card-mark"><p class="title">【LOL】阿狸的娇喘让人听了根本把持不住啊</p><p class="author">up主:逗比宇</p><p class="play">播放:18.1万</p></div></a><div class="watch-later-trigger w-later"></div></div><div class="groom-module"><a href="/video/av13368026" target="_blank" title="【阅后即瞎】教你如何给有钱人当孙子"><div class="lazy-img"><img alt="【阅后即瞎】教你如何给有钱人当孙子" src=""></div><div class="card-mark"><p class="title">【阅后即瞎】教你如何给有钱人当孙子</p><p class="author">up主:阅后即瞎</p><p class="play">播放:58.0万</p></div></a><div class="watch-later-trigger w-later"></div></div><div class="groom-module"><a href="/video/av13375033" target="_blank" title="【声优竟是同一人!】笨女孩中的声优们还配音过哪些角色#5"><div class="lazy-img"><img alt="【声优竟是同一人!】笨女孩中的声优们还配音过哪些角色#5" src=""></div><div class="card-mark"><p class="title">【声优竟是同一人!】笨女孩中的声优们还配音过哪些角色#5</p><p class="author">up主:饭帅marshall-fun</p><p class="play">播放:7.3万</p></div></a><div class="watch-later-trigger w-later"></div></div><div class="groom-module"><a href="/video/av13342705" target="_blank" title="【MMD】重音Teto·现金才是BEST FRIEND【镜头配布】"><div class="lazy-img"><img alt="【MMD】重音Teto·现金才是BEST FRIEND【镜头配布】" src=""></div><div class="card-mark"><p class="title">【MMD】重音Teto·现金才是BEST FRIEND【镜头配布】</p><p class="author">up主:TsWEITAO</p><p class="play">播放:1.0万</p></div></a><div class="watch-later-trigger w-later"></div></div><div class="groom-module"><a href="/video/av13326941" target="_blank" title="【1人20役】幻想万华镜-永夜异变之章(中篇)【中文配音】"><div class="lazy-img"><img alt="【1人20役】幻想万华镜-永夜异变之章(中篇)【中文配音】" src=""></div><div class="card-mark"><p class="title">【1人20役】幻想万华镜-永夜异变之章(中篇)【中文配音】</p><p class="author">up主:瑷珥</p><p class="play">播放:1.9万</p></div></a><div class="watch-later-trigger w-later"></div></div><div class="groom-module"><a href="/video/av13358364" target="_blank" title="【入宅五年】百位动画男神大混剪!为喜欢的角色献上弹幕吧!"><div class="lazy-img"><img alt="【入宅五年】百位动画男神大混剪!为喜欢的角色献上弹幕吧!" src=""></div><div class="card-mark"><p class="title">【入宅五年】百位动画男神大混剪!为喜欢的角色献上弹幕吧!</p><p class="author">up主:机智的废柴君</p><p class="play">播放:1.9万</p></div></a><div class="watch-later-trigger w-later"></div></div><span class="rec-btn prev">昨日</span><span class="rec-btn next">一周</span></div></div><div id="home_popularize" adData="[object Object]" state="loading" class="popularize-module report-wrap-module report-scroll-module clearfix"><div class="l-con"><div class="headline clearfix"><i class="icon icon_t icon-promote"></i><span class="name">推广</span></div><div class="storey-box clearfix"><div data-id="0" data-loc-id="34" class="spread-module"><a href="/video/av13346734" target="_blank"><div class="pic"><div class="lazy-img"><img alt="【手游北】花老师教你打卡牌" src=""></div><!----><div class="cover-preview-module"><!----><div class="progress-bar"><span style="width:0%;"></span></div></div><div class="mask-video"></div><div class="danmu-module"></div><span class="dur">22:53</span><img src="//s1.hdslb.com/bfs/static/webssr/home/images/cm_1.png" class="gg-pic"><div class="watch-later-trigger w-later"></div></div><p title="【手游北】花老师教你打卡牌" class="t">【手游北】花老师教你打卡牌</p><!----></a></div><div data-id="70438" data-loc-id="34" class="spread-module"><a href="/video/av2736119" target="_blank"><div class="pic"><div class="lazy-img"><img alt="《纳米核心 第三季》第4话更新!" src=""></div><!----><div class="cover-preview-module"><!----><div class="progress-bar"><span style="width:0%;"></span></div></div><div class="mask-video"></div><div class="danmu-module"></div><!----><!----><div class="watch-later-trigger w-later"></div></div><p title="《纳米核心 第三季》第4话更新!" class="t">《纳米核心 第三季》第4话更新!</p><!----></a></div><div data-id="70444" data-loc-id="34" class="spread-module"><a href="/video/av13326188" target="_blank"><div class="pic"><div class="lazy-img"><img alt="【怪话小组】别找我麻烦 翻唱" src=""></div><!----><div class="cover-preview-module"><!----><div class="progress-bar"><span style="width:0%;"></span></div></div><div class="mask-video"></div><div class="danmu-module"></div><span class="dur">02:17</span><!----><div class="watch-later-trigger w-later"></div></div><p title="【怪话小组】别找我麻烦 翻唱" class="t">【怪话小组】别找我麻烦 翻唱</p><!----></a></div><div data-id="70450" data-loc-id="34" class="spread-module"><a href="/video/av11533956" target="_blank"><div class="pic"><div class="lazy-img"><img alt="【纪录片】“杀死”老妈的50种方法 第二季 - 50 Ways to Kill Your Mammy S2 (2015)" src=""></div><!----><div class="cover-preview-module"><!----><div class="progress-bar"><span style="width:0%;"></span></div></div><div class="mask-video"></div><div class="danmu-module"></div><span class="dur">266:11</span><!----><div class="watch-later-trigger w-later"></div></div><p title="【纪录片】“杀死”老妈的50种方法 第二季 - 50 Ways to Kill Your Mammy S2 (2015)" class="t">【纪录片】“杀死”老妈的50种方法 第二季 - 50 Ways to Kill Your Mammy S2 (2015)</p><!----></a></div><div data-id="70456" data-loc-id="34" class="spread-module"><a href="/video/av13156747" target="_blank"><div class="pic"><div class="lazy-img"><img alt="为嘛实验室-02:【无火烤鸡】不好意思,我们在吐鲁番杀了只鸡" src=""></div><!----><div class="cover-preview-module"><!----><div class="progress-bar"><span style="width:0%;"></span></div></div><div class="mask-video"></div><div class="danmu-module"></div><span class="dur">03:51</span><!----><div class="watch-later-trigger w-later"></div></div><p title="为嘛实验室-02:【无火烤鸡】不好意思,我们在吐鲁番杀了只鸡" class="t">为嘛实验室-02:【无火烤鸡】不好意思,我们在吐鲁番杀了只鸡</p><!----></a></div></div></div>
这段代码调用了requests库的get方法,对https://www.bilibili.com发出了一次get请求,返回了一个对象,该对象内部有一个变量content,内容为返回的html代码。
接下来便要观察需要的内容在文本中的格式。
抽出其中一段为例
<div class="groom-module"><a href="/video/av13379383" target="_blank" title="【一人全役】幻想万华镜 永夜异变之章 中篇(日配)"><div class="lazy-img"><img alt="【一人全役】幻想万华镜 永夜异变之章 中篇(日配)" src=""></div><div class="card-mark"><p class="title">【一人全役】幻想万华镜 永夜异变之章 中篇(日配)</p><p class="author">up主:vivian198808</p><p class="play">播放:3.7万</p></div></a><div class="watch-later-trigger w-later"></div></div>
经过观察发现需要抓取的标题内容格式大约是
<p class ="title">(.*?)</p>
此处中的(.*?)就表示我们要匹配的对象,它表示可以匹配任意字符串。
关于正则表达式的详细内容可参考此处
于是利用正则表达式
# 由于表达式中含有双引号,因此应用单引号括起表达式或转义
title_list = re.findall(string = html.content,
pattern = '<p class ="title">(.*?)</p>')
我们便得到了视频的标题。
其中返回的title_list为标题字符串的列表
若是想要得到作者的名字,可以利用正则表达式
<p class ="title">(.*?)</p><p class="author">up主:(.*?)</p>
返回的内容为标题up主二元元组的列表
补充
有时候服务器设置了防爬虫机制
为了向服务器假装自己是通过浏览器访问
可以通过设置get方法的headers属性
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36"
}
html = requests.get(url = "https://www.bilibili.com",
headers = headers)
如此便可伪装自己为浏览器。
总结
本节主要讲解了爬虫的基本概念和requests库以及re库的基本用法,
抓取了b站首页视频的相关内容。