网页抓取解密(可参照Python第三方库request详解这篇文章课程以简单示范)
优采云 发布时间: 2022-01-21 18:22网页抓取解密(可参照Python第三方库request详解这篇文章课程以简单示范)
注:本文仅供爬虫初学者参考,不涉及过多技术精华
感谢您阅读本文。最近在家里放假,空闲的时候很无聊。我开始上手python爬虫,可以完成一些基础的数据爬取(对于一些反爬比如JS渲染、界面加密等页面还在学习中),这篇文章是近期的一个小总结熟练掌握爬取静态网页的方法。
如果你从来没有接触过相关知识,那么在开始之前至少需要有python的入门知识,详情见廖雪峰官方网站,如果你想深入探索爬虫的本质,希望想要更好的爬取需要的数据的朋友,那你需要熟悉web前端知识(HTML、JS、CSS、jQ、Ajax等),本文不会涉及的太深,所以不会加以阐述。
接下来简单介绍一下BeautifulSoup库和requests库(另外需要安装lxml库):
Beautiful Soup 是一个 Python 库,其主要功能是从网页中抓取数据。官方解释如下: Beautiful Soup 提供了一些简单的、python 风格的函数,用于处理导航、搜索和修改解析树。它是一个工具箱,通过解析文档为用户提供他们需要抓取的数据。由于其简单性,无需太多代码即可编写完整的应用程序。
Beautiful Soup 自动将输入文档转换为 Unicode 编码,将输出文档自动转换为 utf-8 编码。不需要考虑编码方式,除非文档本身没有指定编码方式,否则Beautiful Soup无法自动识别编码方式。详细请参考 BeautifulSoup4.2.0 的官方文档。
Requests 是用 Python 编写的,是一个基于 urllib 的 HTTP 库。它比 urllib 更方便,可以为我们省去很多工作,并且可以满足 HTTP 测试的要求。关于这个文章的详细解释请参考Python第三方库请求。
接下来,我们就开始在网易云课堂爬取计算机专业的必修课,做一个简单的演示:
1.首先,导入我们需要的库:
from bs4 import BeautifulSoup
import requests
2.然后我们使用url来确定我们的目标URL:
url='http://study.163.com/curricula/cs.htm'
URL 是统一资源定位器,基本 URL 收录协议、服务器名称(或 IP 地址)、路径和文件名,如“protocol://authorization/path?query”
加载一个网页的过程,基本上就是客户端以某种方式向服务端发送请求,服务端处理完之后,会给我们响应
请求方法有很多种:get、post、head、put、options等,常用的只有get和post两种。对于一般的网页,我们通常只使用get方法。get和post的区别-知乎
3.接下来,我们开始使用requests.get()获取网页,使用bs4解析网页:
response=requests.get(url)
soup=BeautifulSoup(response.text,'lxml')
soup=BeautifulSoup(html #target URL text content# ,'lxml'#parser# )
4.此时,我们需要手动去目标网站寻找我们想要的数据的位置:
基本步骤:进入网页后,打开开发者工具(F12),或者网页右键查看,或者直接找到你需要的内容右键查看。
我们希望爬取本科阶段计算机专业的所有课程,那么我们需要找到所需数据的位置,并复制其位置路径,无论是类名还是选择器路径等。关键是满足我们您可以使用它来准确找到您需要的数据。
在获取相同类型的数据时,要注意观察它们之间的标签是否有共同点。经过分析,我们可以使用 select() 将它们统一过滤到列表中。
常用的路径描述有两种:CSS Selector和XPATH,而soup.select()不支持XPATH。select方法的详细说明。
经过分析,我们发现所有课程都有两条不同的特色路径。使用这两个特征路径找到路径,我们就可以过滤出需要的数据:
data0=soup.select('span.f-thide.cataName.f-ib')
data1=soup.select('#j-package > div > div > div > a')
5.最后我们需要打印出数据:
for x in data0:
print(x.get_text())
for y in data1:
print(y.get_text())
由于我们这里只过滤掉一个数据,所以这只是一个例子。
如果有多个相关数据,可以使用正则匹配等方法对数据进行处理,整理成字典,然后打印出来或保存到文件或数据库等。
由于作者能力有限,很多地方我实在不敢细说。如有不足,希望及时指出。
以下是文章的简要摘要:
静态网页爬取步骤:
1.使用bs4和requests获取URL的响应并解析网页
2.观察,找到需要数据的位置,过滤
3.对标签中的文本进行处理,如果数据量大且相关,则将其排序到字典中
我们当然可以将一些基本的操作封装成函数,方便操作:
def get_wb_data(url,label,headers=None):
if(headers==None):
response = requests.get(url)
else:
response=requests.get(url,headers=headers)
soup=BeautifulSoup(response.text,'lxml')
data=soup.select(label)
return data
def print_data(data):
for x in data:
print(x.get_text())
因此,如果我们需要长时间获取一个或同一个类型的网站的某个类型的信息,我们可以封装函数,这样可以更方便。
想必看过这篇文章的都是想接触python爬虫的初学者。这是建议:
多动手操作,大胆爬取你想要的信息。在这个过程中,你会发现有很多东西是爬不下来的。这时候我们可以进一步探索异步加载的处理,也就是如何处理动态网页的知识。
而我们可能会遇到仅仅get不足以获取数据的情况,那么我们就需要理解Headers,让爬虫模仿人类访问等知识。
再进一步,我们发现有些网站很多东西都是不断更新的,专门针对反爬虫的,那么我们可能会遇到破解验证码、如何避免IP阻塞等问题。
…………(假装是分界线)
作者确实能力有限,对未来的掌控并不精通。如果作者认为可以继续进一步解释,可能会有后续文章。
希望这篇文章能对一些初学者有所帮助,再次感谢。