安装requests库
方法是:在Mac电脑里打开终端软件(terminal),输入pip3 install requests,然后点击enter即可;Windows电脑里叫命令提示符(cmd),输入pip install requests 即可。

爬虫第一步、获取数据

requests.get()方法

import requests #引入requests库。
requests [riˈkwests] n. 请求,要求( request的名词复数 ); 需要; 所请求的事物; 申请书
res = requests.get(‘URL’) #requests.get是在调用requests库中的get()方法,它向服务器发送了一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。我们把这个响应返回的结果赋值给变量res
requests.get()发送了请求,然后得到了服务器的响应。服务器返回的结果是个Response对象,现在存储到了我们定义的变量res中。
print(type(res)) #打印变量res的数据类型
这代表着:res是一个对象,属于requests.models.Response类。好,既然已经知道res是一个Response对象了,我们也就可以去了解它的相应属性和方法了。

Response对象常用的四个属性:
Response读作: [risˈpɔns]中文意思n.响应.回答,答复;反应

属性一、response.status_code 用法

status[ˈsteitəs] n.状况;地位;资格;身份;情形
code[kəud]n.代码,代号;电码

print(res.status_code)#打印变量res的响应状态码,以检查请求是否成功

**

属性二、response.content

**
content 读作:[ˈkɔntent]n.(pl.)–内容;书报内容 ,
它能把Response对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载 示例:
pic = res.content
#新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
#图片内容需要以二进制wb读写。
photo = open(‘ppt.jpg’,‘wb’)
#获取pic的二进制内容
photo.write(pic)
#关闭文件
photo.close()

属性三、response.text

这个属性可以把Response对象的内容以字符串的形式返回,适用于文字、网页源代码的下载。例:
import requests
res = requests.get(……….网址)
#把Response对象的内容以字符串的形式返回
novel=res.text
#现在,可以打印小说了,但考虑到整章太长,只输出800字print(novel[:800])

属性四、response.encoding

它能帮我们定义Response对象的编码。事实上,requests.get()发送请求后,我们得到一个Response对象,其中,requests模块会对数据的编码类型做出自己的判断。
用法示例:

# 引用requests库
import requests# 下载《三国演义》第一回,我们得到一个对象,它被命名为res
res=requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
# 定义reponse对象的编码为utf-8。
res.encoding='utf-8'
# 把Response对象的内容以字符串的形式返回
novel=res.text
# 打印小说的前800个字。
print(novel[:800])
遇上乱码的时候,才考虑用res.encoding,一般不用。

总结

可以看到,爬虫的第0步:获取数据,本质就是通过URL去向服务器发出请求,服务器再把相关内容封装成一个Response对象返回给我们,这是通过requests.get()实现的,而我们获取到的response对象下有四个常用的属性。要注意这种从URL到Response这种操作对象的转换关系。

robots协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(robots exclusion protocol),这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。
淘宝的robots协议 ( http://www.taobao.com/robots.txt)示例:

User-agent:  Baiduspider # 百度爬虫
Allow:  /article # 允许访问 article
Allow:  /oshtml # 允许访问 oshtml
Allow:  /ershou # 允许访问 ershou
Allow: /$ # 允许访问根目录,即淘宝主页
Disallow:  /product/ # 禁止访问product文件夹下面的所有文件,但是product文件夹本身允许被访问
Disallow:  / # 禁止访问除 Allow 规定页面之外的其他所有页面
​
User-Agent:  Googlebot # 谷歌爬虫
Allow:  /article
Allow:  /oshtml
Allow:  /product # 允许访问product文件夹及product文件夹下面的所有文件
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  / # 禁止访问除 Allow 规定页面之外的其他所有页面
​
…… # 文件太长,省略了对其它爬虫的规定,想看全文的话,点击上面的链接
​
User-Agent:  * # 其他爬虫
Disallow:  / # 禁止访问所有页面

robots协议是“分段”的,每个段落都含有以下两种字段:一种是User-agent:,另一种是Allow:或Disallow:。
User-agent表示的是爬虫类型,上面的示例代码注释了“百度爬虫”和“谷歌爬虫”,我们自己写的爬虫一般要看User-Agent: *,*指向所有未被明确提及的爬虫。
Allow代表允许被访问,Disallow代表禁止被访问。字段对应的值都含有路径分隔符/,限制了哪些或哪一层目录的内容是允许或者禁止被访问的。可以对比上述百度爬虫Disallow: /product/和谷歌爬虫Allow: /product的注释行理解一下。
比如淘宝禁止其他爬虫访问所有页面,也就是说,我们自己写的爬虫不被欢迎爬取www.taobao.com域名下的任何网页。

HTML—html 超文本标记语言


标签

标签用于标记文本信息,指用尖括号(<>和</>)括起来的字母和英文,形式有两种:闭合标签和空标签。
闭合标签,它们绝大多数成对出现(有开始标签<>,也有结束标签</>),如:和是标题标签,

是块标签,和是表单标签。
空标签,顾名思义,指那些“孤苦伶仃”的单标签,它们“形影单只”只有一个尖括号<>(斜杠/可省略),标签开始即结束,比如 是图片标签,是链接标签,是input标签。
不要把标签与元素混淆了,元素,其实是包含了开始标签与结束标签内的所有代码。如html元素是指包括标签内的所有代码。
通过标签的英文名,我们大致能猜测出它的作用:给浏览器介绍文本的结构。你看 这个位置,我打算放一张图片,那个里面我塞的是一张表单。

属性


<! DOCTYPE html>是一个全局声明,目的是告诉浏览器,你现在处理的这个文档是HTML文档

在<style>标签中定义class属性的样式用点.,id属性用井号键#


class属性的作用是给元素增添类名,多个元素可配置一个类名,类名相同的元素沿袭同一套样式
id属性则刚好和class属性相反,整个HTML文档,它是独一无二的标识,每个id值只能定义一个元素
总结:

开发者工具—查看HTML源码:
使用谷歌浏览器(chrome)随机打开一个网页,右键点击【检查】选项,Windows电脑的同学可直接按F12,随即,网页下方(或右方)弹出一个子窗口,这便是浏览器的开发者工具。

开发者彩蛋
值得一提的是,浏览器的开发者工具除了可以查看html的源代码,还可以查看前端程序员留给同行的“暗号”,老师带你去看看。
打开百度网页下的开发者工具,点击开发者工具导航栏上的Console标签,哎嘿,发现了百度的招聘链接。

修改网页
打开开发者工具,

点上面这里,然后再把鼠标放在网页中,右边代码区中描述它的代码会被标亮出来,
定位到我们想修改的网页内容,双击修改,按下enter确认,网页内容就变成了刚才输入的样子,当然,这样的修改只是在你本地的修改,而服务器上的源文件你是修改不了的。如果你重新刷新网页,修改的所有内容都会被清空。所以,这些改动仅供你自娱自乐。而程序员们会使用这个方法,在开发者工具这里,调试HTML代码。

获取网页源码并写入地本
我们保存的是HTML文档,它的文件扩展名是.html,如(test.html)
html文件写入和txt文件写入方式一样(打开文件 - 写入文件 - 关闭文件)
代码示例:

# 调用requests模块
import requests
# 获取网页源代码,得到的res是response对象。
res = requests.get('URL')
# 检测请求是否正确响应
print(res.status_code) # 正确响应,进行读写操作
# 新建一个名为book的html文档,这里的文件没加路径,它会被保存在程序运行的当前目录下。
# 字符串需要以w读写。
if res.status_code == 200:file = open('book.html','w')# res.text是字符串格式,把它写入文件内。file.write(res.text) # 关闭文件file.close()

双击我们写在本地的book.html文件,你会发现它可以用浏览器打开。这就好比MP3文件用音乐播放器打开,txt用记事本打开。

爬虫第二步、解析和提取数据

BeautifulSoup网页解析库—解析网页中的数据

Soup [suːp]汤 BeautifulSoup中文意思:美味的汤.
parser[ˈpɑːsə]分析程序
安装:Win终端输入:pip install BeautifulSoup4

1、解析数据,解析数据步骤就二行:

from bs4 import BeautifulSoup
soup = BeautifulSoup(字符串,'html.parser')

解析文件,示例:

import requests
from bs4 import BeautifulSoup  #引入BS库,bs4就是beautifulsoup4
res=requests.get('url') ## 获取网页源代码,得到的res是response对象
soup = BeautifulSoup(res.text,'html.parser') # 把网页解析为BeautifulSoup对象,括号中第0个参数必须是字符串类型,第1个参数是解析器,souty就是已经被解析过的BeautifulSoup对象

html.parser 是解析器,为Python内置库,第0个参数是要被解析的文本,注意了,它必须必须必须是字符串。括号中的第1个参数用来标识解析器,我们要用的是一个Python内置库:html.parser。(它不是唯一的解析器,却是简单的那个)
soup的数据类型是<class ‘bs4.BeautifulSoup’>,说明soup是一个BeautifulSoup对象。
soup,它是我们所请求网页的完整HTML源代码,我们所要提取的信息都在这里面.打印soup出来的源代码和我们之前使用response.text打印出来的源代码是完全一样的,但它们属于不同的类:<class ‘str’> 与<class ‘bs4.BeautifulSoup’>。前者是字符串,后者是已经被解析过的BeautifulSoup对象。之所以打印出来的是一样的文本,是因为BeautifulSoup对象在直接打印它的时候会调用该对象内的str方法,所以直接打印 bs 对象显示字符串是str的返回结果。
我们之后还会用BeautifulSoup库来提取数据,如果这不是一个BeautifulSoup对象,我们是没法调用相关的属性和方法的

2、用BeautifulSoup提取数据
find()与find_all() 是BeautifulSoup对象的两个方法,它们可以匹配html的标签和属性,把BeautifulSoup对象里符合要求的数据都提取出来。find()方法将代码从上往下找,找到符合条件的第一个数据,不管后面还有没有满足条件的其他数据,停止寻找,立即返回。它返回的数据类型是:<class ‘bs4.element.Tag’>,说明这是一个Tag类标签对象
find_all()提取出的是所有满足要求的数据,它返回的数据类型是
<class ‘bs4.element.ResultSet’>,是一个resultSet类的对象。其实是Tag对象以列表结构储存了起来,可以把它当做列表来处理

用find()和find_all()的用法提取的数据还不是目标数据,里面含着HTML标签,所以下面,进入到提取数据中的另一个知识点——Tag对象。

括号中的参数:标签和属性可以任选其一

Tag对象可以使用find()与find_all()来继续检索
爬取豆瓣读书示例:

# 调用requests库
import requests
# 调用BeautifulSoup库
from bs4 import BeautifulSoup
# 返回一个response对象,赋值给res
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
# 把res的内容以字符串的形式返回
html = res.text
# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup( html,'html.parser')
# 通过定位标签和属性提取我们想要的数据
items = soup.find_all(class_='books')
for item in items:# 在列表中的每个元素里,匹配标签<h2>提取出数据kind = item.find('h2') # 在列表中的每个元素里,匹配属性class_='title'提取出数据title = item.find(class_='title')# 在列表中的每个元素里,匹配属性class_='info'提取出数据 brief = item.find(class_='info') # 打印提取出的数据print(kind,'\n',title,'\n',brief) # 打印提取出的数据类型print(type(kind),type(title),type(brief))

运行结果的数据类型,又是三个<class ‘bs4.element.Tag’>,用find()提取出来的数据类型和刚才一样,还是Tag对象。接下来要做的,就是把Tag对象中的文本内容提出来。这时,可以用到Tag对象的另外两种属性——Tag.text(获得标签中的值),和Tag[‘属性名’](获得属性值)。

我们用Tag.text提出Tag对象中的文字,用Tag['href']提取出URL。
只需要修改最后一行代码,我们想要的数据就都能成功提取出来了,示例:
# 调用requests库
import requests
# 调用BeautifulSoup库
from bs4 import BeautifulSoup
# 返回一个response对象,赋值给res
res =requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
# 把res解析为字符串
html=res.text
# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup( html,'html.parser')
# 通过匹配属性class='books'提取出我们想要的元素
items = soup.find_all(class_='books')
# 遍历列表items
for item in items:       # 在列表中的每个元素里,匹配标签<h2>提取出数据               kind = item.find('h2')     #  在列表中的每个元素里,匹配属性class_='title'提取出数据          title = item.find(class_='title')  # 在列表中的每个元素里,匹配属性class_='info'提取出数据   brief = item.find(class_='info')      # 打印书籍的类型、名字、链接和简介的文字print(kind.text,'\n',title.text,'\n',title['href'],'\n',brief.text)

需要强调的一点的是,父标签只能提取它自身的属性值,不能提取子标签的属性值

总结

在BeautifulSoup中,不止find()和find_all(),还有select()也可以达到相同目的。
在bs的官方文档中,find()与find_all()的方法,其实不止标签和属性两种,还有这些:
find(tag,attributes,recursive,text,keywords)
find_all(tag,attributes,recursive,text,keywords,limit)

本学习笔记资料由作者从风变编程学习网站整理而来,风变url: https://www.pypypy.cn/

爬虫一 requests库与BeautifulSoup库、HTML相关推荐

  1. python爬虫、第一个爬虫(基本知识,requests库,BeautifulSoup库,正则表达式re库)

    python爬虫学习开始 1.这是我第一次写博客,表示不太会用csdn的这个编辑器,排版神马的就别说了,有什么值得改进的或者不对的地方,欢迎留言,谢谢. 2.作为学生党,正在自学python爬虫,基于 ...

  2. python 爬虫小试牛刀(request,BeautifulSoup库的实战)

    实战1 实战2 小说章节目录 链接:https://www.37zw.n

  3. Python爬虫:想听榜单歌曲?使用BeautifulSoup库只需要14行代码即可搞定

    目录 BeautifulSoup库 安装BeautifulSoup库 BeautifulSoup库简介 选择解释器 基础用法 节点选择器 获取节点名称属性内容 获取所有子节点 获取所有子孙节点 父节点 ...

  4. 1.1python初入网络爬虫-网络连接和BeautifulSoup库的使用

    目录: 一,网络连接 1.网络连接的过程 2.python实现的网络连接功能 3.拓展: 二,BeautifulSoup简介 1.安装BeautifulSoup库 2.运行BeautifulSoup库 ...

  5. BeautifulSoup库使用

    文章目录 BeautifulSoup库使用 案例: requests结合BS4实现深度爬取三国演义整部小说 BeautifulSoup库使用 BeautifulSoup库介绍 BeautifulSou ...

  6. python爬虫库的常见用法_$python爬虫系列(2)—— requests和BeautifulSoup库的基本用法...

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  7. python爬虫系列—— requests和BeautifulSoup库的基本用法

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  8. python爬虫系列(2)—— requests和BeautifulSoup库的基本用法

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  9. python爬虫爬取虎牙数据(简单利用requests库以及Beautifulsoup)

    首先打开我们所需要爬取的网站,这里我们挑选的是虎牙直播. 我们今天所爬取的数据就是直播名,直播地址,直播的人,观看数以及直播的类别,如下图所示 第一步关于直播的类别,从第一张图片我们可以看到在右边有直 ...

最新文章

  1. MODE —— 输出一个高度和宽度固定的方框(知识点:for循环嵌套for循环)
  2. C++编程风格(一)
  3. java openxml 操作 word,openxml word转成xml
  4. ubuntu使用ssh登入不执行.bashrc解决方法
  5. 把系统时间改到以前后,MyEclipse9.1的工程里的JS文件修改完保存但MyEclipse不会将其不会更新。...
  6. 目标检测的模型集成方法及实验
  7. 1010 Radix(25 分)
  8. Qt 维护工具MaintenanceTool.exe 使用
  9. DeepMind论文三连发:如何在仿真环境中生成灵活行为
  10. 空间战场态势感知系统
  11. 傲腾readyboost_从提示框:自动耳机音量调节,Compact Windows ReadyBoost和安全电话充电...
  12. 如何用CSS把正方形变成圆形
  13. 计算机中级职称工作小结,个人专业技术工作小结
  14. 软件测试 (4)Linux命令
  15. python语言是干什么的-python语言可以干什么
  16. 找不到 xxx 的DNS地址,现在正在诊断问题
  17. spacedesk-把ipad变成显示器-真香经验全面分享
  18. 计算机专业毕设评阅人评语,毕业论文指导教师评语与评阅人评语写法
  19. shiro官方源码包下载
  20. DXperience皮肤设置 C#第三方控件学习笔记

热门文章

  1. CSS-基础选择器、字体文本属性、引入方式
  2. java编程题火车进站_火车进站
  3. 第三章:SQL——视图操作
  4. C++ 利用 windbg + dump + map + cod 文件分析 crash 原因
  5. BeeGFS-Mon对接Grafana
  6. 玩游戏计算机虚拟内存怎么设置,玩游戏时提示虚拟内存太小怎么办
  7. 台式计算机的辐射,台式电脑哪个部分辐射比较大?
  8. 计算机主机对人体的辐射,电脑辐射的范围是多少
  9. android type-c 接电视,有Type - C接口,却想电脑直连电视机?教你5个方法,简单又实用...
  10. myCPUZ (未完待续)