赞
踩
爬虫,我的简单理解就是通过写定的程序,利用计算机的高速的优势,批量高效的获取数据的一种机制。通常我们访问网站是通过浏览器,而爬虫就是通过程序访问网站,也就是让程序伪装成浏览器进行访问。
Request伪装浏览器发送请求应用实例
import requests
res = requests.get(
url='https://blog.csdn.net/BBJG_001', # 我的CSDN个人主页
)
print(res.url)
# https://blog.csdn.net/BBJG_001
print(res.text) # 查看整个网页(html的形式),就是在浏览器中查看网页源代码所看到的的内容
# 这里只截取开始几行来显示
#
#
#
#
#
BeautifulSoup
是一个用来解析html页面的模块,可以接收一个html或xml的字符串,通过其中封装的方法可以很方便的根据标签以及标签的属性获得html页面中的标签所含的内容。
在此之前,爬取的页面的解析往往是通过正则表达式来完成的,而正则表达式的使用不是那么容易的
这里以我的CSDN个人主页为例来说明BeautifulSoup模块的使用
导入支持包
import requests
from bs4 import BeautifulSoup # 解析html网页的
获取网页
res = requests.get(
url='https://blog.csdn.net/BBJG_001', # 我的CSDN个人主页
)
用获取的网页封装BeautifulSoup对象
soup = BeautifulSoup(res.text, 'html.parser')
在浏览器中访问上面的网页,按F12查看源码
看到目录主体都在class=‘article-list’的div下
展开一个文章项目
其中一个h4标签中封装这标题一行,包含着指向文章详细内容的链接
根据上面的结构从BeautifulSoup中获取内容
div = soup.find(name='div', attrs={'class': 'article-list'})
# find:找到阈值相匹配的第一个标签
# 通过class进行find的时候,要格外注意一下,因为不同的标签的class值可能是相同,
# 这里我通过查看源码确认了该class值只在这个div才有
# 通过id寻找是一种比较准确的方式,因为通过id匹配是唯一的
# 在class相同的情况下,可以通过多指定几个属性的方式增加定位的精确度
h4_list = div.find_all(name='h4')
# find_all:找对与之相匹配的所有标签
a_list = [h4.find(name='a') for h4 in h4_list] # 从h4列表中提取出a标签
data = {}
for a in a_list:
link = a.attrs.get('href') # 获取标签的某个属性
content = a.text# 获取标签中间的内容
print(link)
# 只给出部分做显示
# https://blog.csdn.net/BBJG_001/article/details/104587102
# https://blog.csdn.net/BBJG_001/article/details/104587067
# https://blog.csdn.net/BBJG_001/article/details/104587033
获取图片举例
注意这里跟上面没有什么关系,只是为了介绍这个功能而做的测试
r2 = requests.get('https://imgconvert.csdnimg.cn/aHR0cHM6Ly96eWRzdG9yZS0xMjU4NDc3NzE0LmNvcy5hcC1iZWlqaW5nLm15cWNsb3VkLmNvbS90eXBvcmEvMjAyMDAyMjMxNTE2MDctMTE5ODQ0LnBuZw?x-oss-process=image/format,png')
savepath = r'data/pictures/test01.png'
with open(savepath, 'wb') as f: # 因为下载的是图片,所以是wb,以二进制流写入
f.write(r2.content)
# ret.text 将结果ret转换成字符串,ret.content直接是二进制文件
实际应用中可以find到网页中获得的img标签中的src属性,根据src获取文件,并进行保存,注意保存图片时文件打开方式为wb,f.write()中的传参为二进制形式
防爬虫机制
要说明的是,不是所有的网站内容都是可以爬取,或者说不是那么容易爬取的
浏览器在发送请求时,除了会携带一些服务器所需的认证信息(用户名/密码/token等),还会携带一些浏览器本身的信息,比较简单的防爬虫机制就是去检测发送的信息中的这些浏览器信息,如果信息不完善或不匹配,访问目标可能会驳回通过代码发送的访问请求
通过在代码中追加浏览器信息可以骗过防爬虫措施不到位的网站
山东掌趣网络科技
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。