【python基础】爬虫系列之基础篇一: 初识爬虫

爬虫系列之基础篇一: 初识爬虫

数据时代,用较低的成本获取想要的数据,然后将之整合消化,不失为一种生存之道。


在这里插入图片描述



1 爬虫是什么

1.1 爬虫定义

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。简单说:就是用事先写好的程序去抓取网络上所需的数据,这样的程序就叫网络爬虫。编写网络爬虫的程序员叫做爬虫工程师。

1.2 爬虫分类

根据使用场景,网络爬虫可分为通用爬虫聚焦爬虫两种。

  • 通用爬虫
    捜索引擎抓取系统的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
    ·什么是搜索引擎?
    搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。
    通用网络爬虫的作用:
    从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时。
  • 聚焦爬虫
    聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:**聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。**而我们关注和学习的,就是聚焦爬虫。

2 爬虫进阶之路

2.1 初级

  • WEB前端知识:HTML、CSS、JavaScript、DOM、HTML、Ajax、JQuery、Json等
  • 正则、Xpath、selenium、requests等模块使用
  • 深度优先和广度优先抓取算法实现及使用
  • 熟悉HTTP和HTTPS协议的基础知识,了解GET和POST方法,了解HTTP头中的信息,包括返回状态码、编码、UA、Cookie和Session等

2.2 中级

  • IP被阻断时,会使用代理
  • 抓包工具Fiddler等简单使用,会分析Ajax请求,能做一些不那么困难的模拟登录
  • selenium高级用法、简单JS逆向
  • 并发,多线程爬虫的使用,对Scrapy等开源框架有一定深度的认识

2.3 高级

  • 能进行各种不同网页的验证码破解
  • 能破解网站的数据加密
  • Redis/MongoDB数据缓存系统搭建
  • 分布式爬虫系统、增量爬虫
  • APP抓包、复杂JS逆向

3 requests库简介

Requests模块是发起http请求最常见的模块,也是爬虫爱好者最常用的包之一。继承了urllib的所有特性。Requests支持http连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。关键是文档完备,教程众多。

3.1 文档地址

3.2 安装

pip install requests

3.3 requests之get请求

http最常用的请求之一,绝大多数情况下被用来从服务器获取内容,而post则常用来向服务器提交数据。

案例一:一页html到本地

# -*- coding: UTF-8 -*-

import requests

# 发起请求
response = requests.get(url="https://www.baidu.com/more/")
response.encoding = 'utf-8'

# 保存页面
with open("result.html", 'w+', encoding='utf-8') as f:
    f.write(response.content.decode())

案例二:保存多页html到本地

# -*- coding: UTF-8 -*-
import requests

# 请求参数
params = {}

# 请求头
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cookie': 'BAIDU_SSP_lcr=https://www.baidu.com/link?url=qTr1SeIsm2Cv5NW4ILcjrCmjLnSZLExM6A4CXjI3kXD02hAROxxg3Ovj6-1nH8X5&wd=&eqid=94f842c100000cf60000000461528509; smidV2=20210928105500810d6da3cc55adf32d980e21872c9a32003aedb70c35d0790; app_cookie=1632798171; __dacevid3=0x4c32fd06c3da7f8c; __dacemvst=1b5b2c33.7bdd61f3; Hm_lvt_ac423772552f47d0bb3ae6d55e13262c=1632798172,1632798185; Hm_lpvt_ac423772552f47d0bb3ae6d55e13262c=1632798185; __dacemvst=1b5b2c33.7bdd61f3|1632799999878',
    'referer': 'https://m.hupu.com/nba/news',
    'sec-ch-ua': '"Google Chrome";v="93", " Not;A Brand";v="99", "Chromium";v="93"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}

# 发起请求
for page in range(1, 6):
    response = requests.get(url="https://m.hupu.com/nba/news/{}".format(page), headers=headers)

    # 保存文件
    print(response.text)
    with open("./本地镜像/" + "第" + str(page) + "页.html", 'w+', encoding='utf-8') as f:
        f.write(response.text)

请求头怎么找: F12->network->找到你要的内容->再点击headers就看到了。


3.4 requests之post请求

http最常用的请求之一,绝大多数情况下被用来用来向服务器提交数据,获取服务器的某种响应。

案例一:手动版英汉互译

# 获取用户输入
kw = input("请输入单词:")

# 定义参数字典
data = {
    'kw': kw
}

# 定义请求头
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest'
}

# 发起请求
response = requests.post(
	url="https://fanyi.baidu.com/sug",
	data=data,
	headers=headers
)

# 获取数据
trans = response.json()["data"]
for item in trans:
    for k, v in item.items():
        print(v)

4 爬虫之风险

  • 以不抓取、不贩卖个人信息及组织企业重要敏感信息为底线。
  • 公开免费的信息,不进行违法操作,比如造假、诽谤等。
  • 信息是公开的,但信息本身具有较高的商业价值,能够给使用者带来商业利益,此时的爬虫也违法。
  • 未经平台授权,强行突破反爬措施,导致被爬网站的运行受到严重影响,违法。
  • 经用户同意搜集用户个人信息的,应当明确告知搜集和处理用户个人信息的方式、内容和用途,不得收集其提供服务所必需以外的信息,不得将用户个人信息用于其提供服务之外的目的。
  • 网络运营者不得泄露、篡改、毁损其收集的个人信息,未经被收集者同意,不得向他人提供个人信息,但经过处理无法识别特定个人且不能复原的除外。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流畅的美杜莎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值