Python爬虫是什么?怎么自动下载网页数据?
一、什么是网络爬虫?
网络爬虫, 也就是网络蜘蛛、网络机器人中的那个, 是一种依照一定规则, 将会自动展开浏览、进行检索为网页信息之类的程序、脚本。简单讲哈, 它就是一段可以自动去访问网站进而获取数据的代码。
你能够将爬虫视作一个“不知疲倦的做搬运工作的人”, 它去效仿人类浏览网页的举动, 也就是打开网页, 阅读其中的内容, 继而提取出有用的信息, 然而其速度相较于人要快成千上万倍, 并且它能够7×24小时始终不间断地工作。
在本质方面来讲, 采取爬虫所做的事情, 这与你将浏览器开启去访问一个网站的情况不存在差异。仅仅只是, 你属于手动去输入网址的那种行为, 借助眼睛去看呈现的内容, 再运用鼠标进行点击操作,然而爬虫却是借助代码以自动方式去发送网络请求之举, 随后把返回得来的网页源代码留存下来用来供后续阶段进行分析。
二、爬虫能做什么?
爬虫所具备的应用场景极为广泛, 能够这么讲, 只要是在网页之上所展现而出的信息, 从理论层面而言, 均能够借助爬虫去进行获取。
数据的分析涉及到, 爬虫乃是数据分析师获取海量数据时必备的工具。对于数据分析而言, 首先不能没有数据源, 同时爬虫能够依据特定目的去采集更具价值的数据, 还能将无效信息给过滤掉。
商业情报这一范畴内, 企业能够借助爬虫去及时获取诸多方面, 诸如市场动态, 还有产品信息, 以及竞品价格等内容。以电商平台为例, 电商平台能够运用爬虫去监控竞争对手的商品价格, 同时监控其库存状态, 进而及时调整自身的定价策略。
挖掘潜在客户, 销售团队能够依据目录网站、社交平台, 去爬取潜在客户的联系方式, 进而自动构建客户名单。有相关数据展露, 借由这样的方式, 每月能够获取3000多条潜在客户信息, 并且每位销售每周能够节省大约8小时的手动搜集时间。
开展市场调研, 要进行爬取用户评论的操作, 还要爬取社交帖子, 并且要爬取论坛留言, 在这之后, 分析消费者针对产品给出的真实反馈, 籍此来帮助制定精准的营销策略。
针对舆情进行监测, 新闻媒体以及政府机构能够借助爬虫利用实时的方式去追踪网络之上的热点话题, 还有舆论的动向。
三、爬虫是怎么工作的?
五个核心组件, 通常被包含在一个很完整的爬虫程序里, 这就如同一条从事生产的线上, 有着各种各样不同的工位。
1. 调度器, 它宛如爬虫的“大脑”或者CPU, 其职责在于协调各个组件之间的工作, 还要决定在何时去做何事。
2. URL管理器, 负责维护两个列表, 一个是亟待进行爬取操作对待着 URL 地址的列表, 另一个已是经历过爬取的 URL 地址所组成的, 已爬取完的列表。其用途乃能够防止针对同一个页面出现重复性的打捞抓取行为, 进而规避踏入循环抓取的状况之中。
3. 网页下载器, 它会依据传入的URL地址去下载网页, 还要把网页内容转变成一个字符串。常用的下载器存在于标准库当中, 还有更具强大力量的第三方库。
4. 用于网页解析的工具: 它会针对下载得到的网页字符串实施解析操作, 依据相应需求把有价值的信息提取出来。在解析器方面存在多种可供选择的情况, 像是正则表达式, 还有自带的html., 另外有功能较为强大的那种, 以及速度相对更快的lxml。
5. 使用的程序, 会把从 web 页面里抽取到的具有实际上有用处的数据, 加以妥善整理, 进行存储, 并且予以应用, 最终构成能够实际产生作用, 可供使用的数据集合。
四、网站的类型:静态与动态
你要先知晓一个关键的概念, 在着手去写爬虫之前, 网站存在静态网站与动态网站这两种类别, 而它们的爬取方式是全然不一样的。
其中一种网站类型是静态网站, 该类网站的所有内容, 均是直接书写于HTML代码之中的那种模式。当你处于浏览器环境下, 采取右键点击的操作方式, 选择“查看网页源代码”的选项后, 你所看到的那些具体内容, 正是爬虫能够直接获取到的内容。针对这类网站而言, 进行抓取的过程是比较简单的, 只需将HTML进行下载, 然后再实施解析的操作即可。
基于动态加载内容的这类网站, 其网页内容是借助动态方式来加载的, 你所见到的那些商品价格, 还有用户评论, 以及呈现出无限滚动状态的列表, 很有可能是于在页面被打开之后, 才凭借额外发起的请求自服务器那儿获取得到的, 处于此种情境下, 要是直接去爬取HTML源码的话, 那是没办法获取到相关数据的, 这便需要用以更为高级的工具才行, 也就是要通过应用这些工具去模拟真实的浏览器操作。
五、如何用写一个简单的爬虫?
此刻, 我们着手去进行实践操作一番。存在着丰富多样的爬虫库, 我们起始于最基础的部分——运用4行代码去编写一个最为简单的爬虫。
第一步:用下载网页
它自身携带了一个被称作标准库的东西, 不需要额外去进行安装操作, 便能径直拿来使用。下面呈现的这段代码可以获取百度首页的HTML内容:
from urllib import request
# 发送请求,获取响应对象
response = request.urlopen('http://www.baidu.com')
# 读取响应内容,并解码为字符串
html = response.read().decode('utf-8')
print(html) # 打印网页源代码
去运行这段代码, 那么你就会看到在屏幕之上打印出百度首页的HTML源代码。而这, 便是爬虫具备的最基础的功能——也就是把网页“搬”下来。
第二步:用库(更推荐)
尽管是自身所带的, 然而在实际开展的开发过程当中, 更为经常被使用的是一个名为的第三方库, 其语法更为简洁, 功能同样更为强大。首先要做的是将它进行安装:
bash
pip install requests
然后就可以这样用:
import requests
url = 'https://www.baidu.com'
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
html = response.text
print(html)
else:
print(f"请求失败:{response.status_code}")
库具备的一大优点在于能够自动处理诸多细节, 像是编码识别、重定向之类的情况。倘若网站返回的为JSON格式的API数据, 就能够直接借助.json()来进行解析。
六、如何从网页中提取需要的信息?
拿到网页源代码后, 下一步要做的, 是从这些满眼皆是、密密匝匝的HTML标签当中, 提取出你所想要的数据, 这情形恰似于一堆沙子里头去淘金子, 而这是需要合适工具的。有多种解析方式此被提供。
方法一:正则表达式

基于定义匹配规则, 从而在字符串里找出心中所想内容之处, 正则表达式属于最为基础的提取工具。
import re
# 从字符串中提取所有"abc"
m = re.findall("abc", "aaaaabcccabcc")
print(m) # 输出:['abc', 'abc']
# 提取所有数字
m = re.findall("\d", "abc1ab2c")
print(m) # 输出:['1', '2']
# 提取标签之间的内容
m = re.findall(r"
(.*?)
", "
hello
world
") print(m) # 输出:['hello', 'world']
虽然正则表达式具备强大性,然而, 当文档结构呈现复杂状况时, 书写它会变得相对困难, 并且不容易进行维护。
方法二:(强烈推荐)
是这样一个属于第三方的解析库, 其在使用之际, 相较于正则表达式而言, 可谓更为优雅, 也更为方便。而关于安装方法:
bash
pip install beautifulsoup4
使用解析网页的示例:
from bs4 import BeautifulSoup
import requests
# 获取网页
page = requests.get('http://www.yuqiaochuang.com/')
# 创建BeautifulSoup对象,指定解析器
soup = BeautifulSoup(page.text, features="html.parser")
# 找到class为"entry-content"的div,再找到其中所有的a标签
all_title = soup.find("div", "entry-content").find_all("a")
# 遍历并输出每个标题的链接和文本
for title in all_title:
print(title["href"], title.string)
的核心方法包括:
七、如何处理动态网站?
当碰到那种有着动态加载内容特性的网站的时候, 直接去使用就会变得没有效果了, 在这个时候, 就需要借助到那种能够模拟真实浏览器的工具才能——。
安装和浏览器驱动:
bash
pip install selenium
另外, 还得去下载与特定浏览器相对应的那驱动程序, 比如说这种, 之后呢, 要把它添加进系统的PATH里面去。
使用模拟浏览器操作的示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 启动浏览器
driver = webdriver.Chrome()
# 访问网页
driver.get("https://example.com/products")
# 等待页面中的某个元素加载完成
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "product-card"))
)
# 获取所有商品卡片
products = driver.find_elements(By.CLASS_NAME, "product-card")
for prod in products:
print(prod.text)
# 关闭浏览器
driver.quit()
乃至能够应对登录、点击按钮、滚动页面这般繁杂之际操作, 如果不愿目睹浏览器窗口弹出这个情况, 那么可以启用“无头模式”, 借此让浏览器于后台展开运行。
八、爬虫的合法性:这件事一定要知道
爬虫技术自身是品性中立的, 然而倘若运用得不合适就很有可能触及法律, 以下这些原则是必须要加以遵循的:
要遵循协议, .txt文件是网站告知爬虫可循内容与禁涉内容的约定性文件, 虽说该文件不具备法律强制方面的效力, 但是它却属于互联网领域行业通行的规范, 要是无视此协议强行去爬取被禁止的内容, 那就极有可能会被判定为侵权行为。
网站的正常运行不会遭受危害, 这要求爬虫的访问频率不能够过高, 如果过高的话, 就会给目标服务器加大负担, 使得网站的正常运营受到影响, 甚至高频请求说不定还会构成不正当竞争。
不会去侵犯知识产权, 要是未经授权就去爬取原创的文章, 以及音乐, 还有视频, 连同软件代码等等, 并且去进行复制, 还要予以传播或是拿来进行商业利用, 那么这样子说不定就有可能涉嫌侵犯著作权了。
不是关于个人隐私方面情况的, 像去获取个人隐私信息要是包含身份证号、电话号码、具体住址等等系列内容的, 会有一种可能就是违背了《个人信息保护法》, 进而要遭到法律方面对于此行为的制裁呢。
合法的场景举例如下, 爬取政府所公开的政务方面的种种信息, 爬取新闻网站所公开的各类新闻, 爬取学术网站所公开的诸多论文等, 只要没有对他人权益进行种种侵犯, 如此便属于合法的使用范畴范围内, 是合法的使用情形。
九、如何避免被网站封IP?
假使爬虫行动是合法的情形下, 要是请求的频率过高的话, 就有可能会被网站封禁IP。下面是一些常用的技巧:
对爬取频率加以控制: 于每次请求之际设定随机间隔时长, 以此去模拟人类的浏览行为。像借助time.sleep(.(1, 3))来随机等候1至3秒。
对请求头进行设置, 网站借助请求头里的User - Agent来识别访问的人的身份, 能够去收集好多不同浏览器的User - Agent, 每一次发起请求的时候随机挑选一个, 防止使用固定不变的请求头。
运用代理IP, 在IP遭到封禁时进行切换到另外一个代理IP接着开展爬取, 付费的代理服务一般来讲更为稳固可靠。
保持会话:使用.()对象可以自动管理,模拟持续登录状态。
总结
用于自动访问网站, 借助代码下载网页, 进而提取当中有用信息的程序是爬虫。它好似一只能够不知疲倦地帮你从互联网里搬运数据的“小虫子”。
从专业技术层面来讲, 爬虫所进行的工作流程涵盖了, 发送网络请求, 此请求存在用或两种方式, 之后是获取网页内容, 接着要解析HTML提取数据, 提取数据有用或正则表达式这两种途径, 最后是存储结果。当遭遇动态网站之时, 需要运用等工具去模拟真实浏览器的操作行为。
但是, 在着手去写爬虫以前, 存在着一个比技术更为关键重要的前提条件, 此前提便是合法合规。既要遵循具体的协议章程, 又要把控好访问的频率节奏, 同时绝对不能去侵犯知识产权以及个人隐私, 这些都是每一位爬虫开发者必定需要坚守住的底线原则。
将这些掌握了之后, 你便能够着手开启用爬虫去探测那个被称作互联网的庞大不已的数据宝藏之旅。起始之点是从最为简单的静态网页着手推进, 接着一步一步地向着动态网站、反制爬虫的机制发起挑战, 你就会察觉到, 在互联网里能够供你运用的信息要素, 要比试想象之中的数量多得多。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)