一、网络爬虫介绍
网络爬虫通俗讲是使用代码将HTML网页的内容下载到本地的过程。爬取网页是为了获取网页中的关键信息。如:网页中的数据、图片、视频等。python语言中提供了多个具有爬虫功能的库,下面将具体介绍。
urllib库:python自带标准库无需下载、安装即可直接使用。包含大量爬虫功能,但代码编写略显复杂。
reques库:是python第三方库,需要下载、安装后才能使用。在urllib的基础上建立,使用起来更加简洁、方便
scrapy库:是python的第三方库,需要下载、安装之后才能使用。适用于专业应用程序开发的网络爬虫库。
selenium库:是python的第三方库,需要下载、安装之后才能使用。selnium库可用于驱动计算机中的浏览器执行相关命令,无需用户动手操作。
robots.txt规则
-
文件位置
必须放在站点根目录,文件名固定为小写 robots.txt。
例:https://example.com/robots.txt -
文件格式
纯 UTF-8 文本,每行一条指令,Unix 换行符(LF)。大小写敏感。 -
指令详解
3.1 User-agent
指定本条规则作用于哪个爬虫。
语法:User-agent: <爬虫名称>
• 通配符 * 代表所有爬虫。
• 名称必须与爬虫在 HTTP User-Agent 头中声明的一致。
例:
User-agent: * # 对所有爬虫生效
User-agent: Googlebot # 仅对 Google 生效3.2 Disallow
声明禁止抓取的路径前缀。
语法:Disallow: <路径>
• 以 / 开头,表示站点根目录后的相对路径。
• 空值(Disallow:)表示允许抓取全部内容。
• 支持 *(任意字符)与 (行尾)通配符,但并非所有爬虫支持。 例: Disallow: /private/ # 禁止抓取 /private/ 目录及其子目录 Disallow: /*.pdf # 禁止抓取所有以 .pdf 结尾的 URL3.3 Allow(可选)
在 Disallow 范围内再次放行某一路径。
语法:Allow: <路径>
例:
Disallow: /images/
Allow: /images/public/ # 仅 Google、Bing 等支持 Allow 的爬虫生效3.4 Sitemap(可选)
提示站点地图位置,可多条。
语法:Sitemap: <绝对 URL>
二、使用requests库爬取
1.安装requests库
使用pip下载(使用镜像源下载会更快)
pip install requests -i Simple Index
2.访问网页源代码
打开网页后点击鼠标右键后点击访问源代码。

点击窗口中的元素选择按钮

点击需要选择的部分右侧就会对应其源代码

3. 获取网页资源
get()函数:
get(url,params=None,**kwargs)
参数url:表示需要获取的HTML网址(也称url)
参数params:表示可选参数,
参数**kwargs:表示请求采用的可选参数
返回值:返回一个由类response创建的对象。
示例代码:
import requests
r = requests.get('https://www.ptpress.com.cn/')
print(r.text)

get()搜索信息:
当在网页中搜索人民邮电出版社中某些指定信息时,可以在网址内输入,等同于在搜索框输入。

使用get()搜素示例代码如下:
import requests
r = requests.get('https://www.ptpress.com.cn/search?keyword=excel')
print(r.text)

get()添加信息:
get()函数中第2个参数params会以字典的心事在url后自动添加信息,需先将params定义为字典。示例代码:
import requests
info = {'keyword':'Excel'}
r = requests.get('https://www.ptpress.com.cn/search',params=info)
print(r.url)
print(r.text)
三、返回response对象
通过get()函数获取HTML网页内容后,由于网页的多样性,通常还需要对网页返回的Response对象进行设置。
1.response属性
Response包含的属性有status_code、headers、url、encoding、cookiesd等
status_code(状态码):当获取一个HTML网页时,网页所在服务器会返回一个状态码,表明本次获取网页的状态。
常见的HTML(Hypertext Transfer Protool,超文本传送协议)状态码有200(请求成功)
301(网页内容被永久转移到其他url)
404(请求的网页不存在)
500(内部服务器错误)
示例代码:
import requests
r = requests.get('https://www.ptpress.com.cn')
print(r.status_code) #状态码
if r.status_code==200:
print(r.text)
else:
print('本次访问失败')
2. 返回网页内容:
response对象中返回网页内容有两种方法,分别是text()方法和content()方法。
text()方法以字符串的形式返回网页内容。
content()方法以二进制方法返回网页内容。
示例代码:
import requests
r = requests.get("https://cdn.ptpress.cn/uploadimg/Material/978-7-115-67491-3/72jpg/67491_s300.jpg",params=info)
f2=open('b.jpg','wb')
f2.write(r.content)
f2.close()
四、项目案例
使用requests爬取目前网页的所有书名
示例代码:
import requests
import re #正则表达式
r = requests.get('https://www.ryjiaoyu.com/tag/details/7')
result = re.findall('<a href=(.+?)" title="(.+?)">',r.text)
for i in range(len(result)):
print(result[i][1])

&spm=1001.2101.3001.5002&articleId=149495902&d=1&t=3&u=d861070faca54839983272cd930c1006)
5万+

被折叠的 条评论
为什么被折叠?



