【数据分析】【数据获取】【Python爬虫】快速入门+实例+代码+GIF实操

本文介绍了Python爬虫的基础知识,包括爬虫认知、爬虫基础、动态爬虫和scrapy框架的使用。从设置基础工具、理解HTTP请求到使用正则表达式、xpath和beautifulsoup提取数据,再到selenium爬取动态数据和scrapy框架的高效爬取。通过实例讲解了如何爬取哔哩哔哩每日排行榜、动态网站如poco图片和小说网站,适合Python爬虫初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:爬虫认知

爬虫名称由来于蜘蛛结网,蜘蛛在一个一个的蛛网节点中等待猎物的到来。而我们的爬虫也是从网页页面的HTML资源中取出我们要的节点资源。二者过程相似,因此爬虫称之为Spider。

1.1 爬虫的前置知识

知道双标签的HTML结构,知道网页或者抓包工具如何查看资源,了解css和js更佳。如果零基础也没有关系,接下来的案例讲解中会穿插到有相关的知识。

1.2 准备工具

安装有python3,以及requests、lxml、beautifulsoup4、selenium、scripy三方包。

二:爬虫基础

2.1 基本套路

  • 基本流程
    • 目标数据是什么,你要爬取什么数据?
    • 来源地址在哪,你从什么地方爬取数据?
    • 你要的数据放在那些HTML结构里面?
    • 你采用那种方式进行数据提取?xpath、css选择、beautifulsoup提取、re正则提取?
  • 基本手段
    • 破解请求限制
      • 请求头设置,模拟设置请求头
      • 控制请求频率(根据实际情景),控制爬虫休眠(防止DNS攻击目标网站)
      • IP代理(防止反爬手段封你的IP)
      • 签名/加密参数从html/cookie/js分析(网站要求验证信息)
    • 破解登录授权
      • 请求带上用户cookie信息
    • 破解验证码
      • 简单的验证码可以使用识图读验证码第三方库(自己训练验证码算法或者付费实现)
  • 解析数据
    • xpath、css选择、beautifulsoup提取、re正则提取?

2.2 一个简单爬虫

import requests # 导入三方包 requests

url = 'http://www.baidu.com' # 给出访问地址

response = requests.get(url=url) # 利用requests包进行请求访问
print(response.status_code) # 返回请求状态码,200代表访问成功,可以直接答应response查看一下整体效果

查看状态码
查看所有的信息
百度网页对比
对比之后我们发现,两者的网页并不一样,莫着急,上面的简单爬虫只是想要说明在python中爬虫代码有多么容易,短短三行代码就可以构建一个爬虫。真正运用的爬虫可以参考上诉构造方式添加参数构建。

2.3 一些简单参数的添加

2.3.1 爬虫响应信息
代码 含义
response.json() 获取响应内容(以json字符串)
response.text 获取响应内容 (以字符串)
response.content 获取响应内容(以字节的方式)
response.headers 获取响应头内容
response.url 获取访问地址
response.encoding 获取网页编码
response.request.headers 请求头内容
response.cookie 获取cookie
2.3.2 构造header

现如今网站的反爬手段非常多,除了一部分网站不做反爬措施以外,大部分都做了反爬。因此,我们就需要为我们的爬虫来添加各种参数,使得网站认为这是一个用户在浏览内容,而不是一个爬虫在进行内容爬取。当然,现如今随着法律的健全,爬虫也需要注意不要去爬取违法资源。可以参考网站的/robots.txt,看有哪些内容是不允许爬取的。这个还是要看一下的,否则牢狱之灾也不是说着玩的。

网页地址/robots.txt

bilibili的robots.txt
好了,那么我们接下来构造我们的第一个参数,header

我们为什么要设置header这个参数呢?header是我们的浏览器在浏览时提交给网站服务器关于自身浏览器的信息,而我们使用python作为爬虫的时候,给出的header是python,而这样会导致网站服务器直接认出我们是一个爬虫。直接不返回数据,或者返回错误数据。因此,header是我们爬虫要设置的第一个参数。

header的数据可以通过在浏览器查看自己的header。我们一般添加User-Agent信息。
浏览器查看headers

另外,也可以通过三方包fake-useragent进行实例化User-Agent,不过国内可能无法得到fake-useragent的实例化对象,可以在网上找找。或者参考以下文章:https://blog.youkuaiyun.com/jiduochou963/article/details/90383692
fake-useragent的使用

ok,我们设置了第一个参数headers之后,可以尝试着爬取一小部分的信息了,我们使用如下网站:开心一刻笑话:http://xiaodiaodaya.cn/article/view.aspx?id=7436

import requests
from fake_useragent import UserAgent

url = 'http://xiaodiaodaya.cn/article/view.aspx?id=7436' # 请求网址
headers = {
   'User-Agent': UserAgent().random} # 设置header参数

response = requests.get(url, headers=headers) # 发送请求并将接收到的数据作为response
response.encoding = 'utf-8' # 设置返回数据的编码为utf-8可以查看中文
print(response.text) # 打印输出text内容

笑话爬取

import requests
from fake_useragent import UserAgent

url = 'http://xiaohua.zol.com.cn'
headers = {
   'User-Agent': UserAgent().random}

response = requests.get(url, headers=headers)
response.encoding = 'gbk'
print(response.text)

中关村笑话爬取

2.3.3 设置爬取时间间隔

当我们使用爬虫爬取网站时,如果不设置爬虫间隔时间,可能会导致短时间内大量访问网站,导致网站服务器崩溃,或者被网站服务器检测到异常直接封掉IP。因此,为了减少爬取的次数,我们可以设置一次爬虫的间隔时间,可以使用time这个自带的包,设置sleep()休眠时间。如此,就可以杜绝短时的大量访问情况了。

import requests
from fake_useragent import UserAgent
from time import sleep

url = 'http://xiaohua.zol.com.cn'
headers = {
   'User-Agent': UserAgent().random}

response = requests.get(url, headers=headers)
response.encoding = 'gbk'
print(response.text)
sleep(2)

一般而言,需要时间间隔的爬虫,都有较大数目的循环爬取,而我们上方的代码实际上只爬取了一次,因此可以不用时间间隔。我目前也没有什么要大量爬取的数据,所以就写了一下如何进行设置,而不是完全的演示。

2.3.4 代理IP

我们注意到了构建一个健康的爬虫,并且也设置了header和时间间隔。然而,有可能网站的服务器反爬算法还是监测到了我们的爬虫程序。虽然一般来说不会出现封IP的现象,但是不可否认的是可能会出现封IP的情况。所以,我们可以通过设置代理IP的方式进行访问。

import requests
from fake_useragent import UserAgent

url
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值