有位粉丝希望学习网络爬虫的实战技巧,想尝试搭建自己的爬虫环境,从网上抓取数据。
前面有写一篇博客分享,但是内容感觉太浅显了
【一个超简单的爬虫demo】探索新浪网:使用 Python 爬虫获取动态网页数据
本期邀请了擅长爬虫的朋友@PoloWitty,来撰写这篇博客。通过他的专业视角和实战经验,一步步引导我们入门,成为一名数据探索的“Spider Man”。
【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库
【Python网络爬虫入门教程2】成为“Spider Man”的第二课:观察目标网站、代码编写
【Python网络爬虫入门教程3】成为“Spider Man”的第三课:从requests到scrapy、爬取目标网站
随着互联网数据的指数级增长,了解如何有效地提取这些信息变得越来越重要。无论是文本模型如ChatGPT,还是视觉模型如Stable Diffusion,它们的训练数据大多来源于互联网的海量数据。在这个日新月异的大数据时代,爬虫也算是其中不得不点的一项基础技能树了。
本系列文章将深入浅出地介绍Python网络爬虫的基础知识和技术,从 Requests 库到 Scrapy 框架的 入门级
使用,为你开启python网络爬虫的大门,成为spider man的一员,并最终以ScrapeMe网站作为目标示例,爬取下网站上的可爱又有趣的宝可梦照片。
在开始之前,还要啰嗦几句叠个甲,网络爬虫虽然强大,但在使用时必须遵守法律法规和网站的爬虫协议。不违法爬取数据,遵守相关法律法规哦~
这是本系列的第一篇文章,将会介绍在编写网络爬虫的过程中需要了解的互联网前端背景知识,以及两个简洁易用的相关库的使用。
通过本教程,你将学会如何开始使用Python进行网络爬虫,从而在这个数据驱动的时代中,更好地利用可用的网络资源。我们期待看到你成为一名数据探索的“Spider Man”!
欢迎在评论分享在爬虫中遇到的问题,让我们一起讨论和学习!
要成功编写一个Python爬虫,关键在于对目标网站进行精确的定制化设计。同时,面对常见的反爬虫机制,你还需要具备应对策略的准备。Python爬虫的技能树广泛而深入,即使是最基础的爬虫,也涉及到HTML、CSS和JavaScript等前端知识。在此,我们将简要介绍这些基础知识,为你的爬虫之旅打下坚实的基础。
HTML是网页构建的骨架,通过各种标记语言来定义页面内容。比如<img>
标签用来标记图像,<a>
标签用来标记链接,而文本可以用<p>
(段落)或者<h1>
到<h6>
(标题)来标记,在爬取的过程中就需要根据这些来对内容进行筛选。CSS则是美化大师,最常用的就是给HTML中的元素加上类名(class)来定义样式。比如,你可以给所有标题元素指定相同的样式,这样就能保持一致风格。
接下来是JS,它让页面动起来!一个常见的用法是使用document.getElementBy
这类方法获取页面上的元素。比如,document.getElementById('someId')
可以获取带有特定ID的元素,而document.getElementsByClassName('someClass')
可以获取所有拥有相同类名的元素。通过这些方法,你能轻松捕获页面上的各种东西,让爬虫更精准地抓取你需要的信息!
当然,这里提到的都只是在编写爬虫的过程中可能最经常会用到的相关知识,如果想要获取更多相关内容,可以在网上搜索相关系列课程进行学习(比如菜鸟教程),这里就不再深入展开了。
接下来咱们来看看在编写爬虫过程中我们会用到的第一个库:request库。
现在,咱们来谈谈requests
库。requests
库就像是蜘蛛侠的蛛丝发射器!想象一下,蜘蛛侠用蛛丝发射器轻松地抓住高楼大厦上的东西,requests
库也能轻松地抓取网页上的数据!
就像蜘蛛侠能迅速把蛛丝射向目标一样,requests.get()
方法能迅速向网站发出请求,抓取你想要的信息。而且,就像蜘蛛侠可以根据需要调整蛛丝的力度和角度一样,你也可以用requests
库的不同参数调整请求,让它更适合你的需求!
有时候,你得给服务器点提示,告诉它你是谁。那就用requests
的headers
参数,就像是在门口留个便条一样。而且,如果你要往网站发送数据,比如登录信息或者表单内容,requests
库也能搞定!
下面来举个例子实操一下:
import requests
import json
url = 'http://t.weather.sojson.com/api/weather/city/101010100'
response = requests.get(url) # 发送请求并得到返回结果
obj = json.loads(response.text) # 加载获取的json格式数据
print(obj)
通过上面的代码,就可以利用天气api获取到北京市的天气。然后这个api返回的内容其实是个json格式的对象,我们可以使用json.loads()
方法将其加载为一个python对象。
好了,学习到这里,你其实就已经可以利用request库和一些api服务设计出一些很炫酷的东西了hhh,比方说利用天气的api再加上一些网页的前端知识,你也可以自己做一个天气预报程序了 ^o^/
但是,如果有小伙伴尝试把上面的url换成https://www.baidu.com
,可能就会发现response.text
获取到的东西有点怪异。别慌!这是因为网页的内容以一种和平常不一样的编码形式展现出来了。
幸运的是,这时就该请出BeautifulSoup
登场了!就像spider man的智能眼镜一样,BeautifulSoup
库能帮你将那些乱七八糟的字符瞬间变成你看得懂的语言,让你轻松读懂网页的内容!
当直接使用request库去请求https://www.baidu.com
时,返回的其实是网页的文本表示,大家一般会使用DOM(文档对象模型)来对它进行解释。当你在浏览器中打开一个网页时,浏览器会下载网页的HTML、CSS和JavaScript文件,然后解析这些文件,构建成一个DOM树。这个树形结构代表了网页的层级结构,比如标题、段落、链接等等元素以及它们的嵌套关系。
而 Beautiful Soup
就是专为网页解析设计的,它对于DOM(文档对象模型)树的解析简直游刃有余。用Beautiful Soup
,你可以像操作树一样操作这个DOM树,轻松找到你想要的内容。比如,你可以用find()
或find_all()
方法按标签名或者类名查找元素,就像在树中找到特定类型的分支一样。
如果我们拿百度页面举例,假设你想找到其中所有的链接,现在就可以用类似这样的代码来进行实现:
import requests
from bs4 import BeautifulSoup
url = 'https://www.baidu.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有的链接
links = soup.find_all('a')
# 输出所有链接的地址
for link in links:
print(link.get('href'))
除了获取所有的链接,我们还可以利用bs4实现各种各样的功能,比方说,我们如果将上面的代码中的'a'
替换成'img'
,将'href'
替换成'src'
,我们便可以获取到百度页面中所有图片的链接,如果再利用request库对这些链接地址进行一下请求,我们就可以轻松的爬取下该页面下所有的图片了!
通过本系列教程的第一课,你应该已经了解到了使用python编写爬虫的一些基础知识,并且对于requests库和Beautiful Soup库有了一定的认识。利用本节课上学到的知识,你就已经可以编写一些简单的爬虫程序啦 ^ o^y
在下一课中,将会利用本堂课上学到的基础知识,使用requests库和Beautiful Soup库编写针对宝可梦图片的简单版爬虫程序。
欢迎持续关注本系列课程!
简单的爬虫程序啦 ^ o^y
在下一课中,将会利用本堂课上学到的基础知识,使用requests库和Beautiful Soup库编写针对宝可梦图片的简单版爬虫程序。
欢迎持续关注本系列课程!