【笔记】2022.5.9 网页数据收集

0. 数据来源

数据分析、数据挖掘的前提是有数据。数据地三大来源:数据库、爬虫、其他平台(API)

Spider:蜘蛛 -> 爬虫:可以在互联网的任意位置获取数据


1. 爬虫概念

爬虫,别名(网页蜘蛛、蠕虫),学名:网络数据采集

根据程序员的自定义规则(想法)在互联网中自动地爬取数据(图片、音频、视频、文字等都叫做数据)


2. 爬虫步骤概述


2.1 爬虫对谁做操作

a. 表面:爬虫对网页做操作

b. 深层次:爬虫对服务器做操作


2.2 对网页操作

a. 需要有HTML、CSS、JavaScript的知识,需要理解某个页面的结构

b. 浏览器页面F12或者FN+F12或者右键检查或者浏览器设置(Ctrl+Shift+I)都可以打开开发人员工具

c. 网页还分为静态页面和动态页面


2.3 使用三方模块requests

a. requests向目标网站的服务器发起请求,服务器根据请求返回响应结果response(对象)

b. 对response响应结果处理完得到的是字符串(HTML页面源代码)


2.4 从页面源代码中得到所需内容

a. 方法一:正则表达式匹配

b. 方法二:使用三方模块Beautifulsoup4对页面源码进行解析,解析完使用CSS选择器拿到所需内容

c. 方法三:使用三方模块lxml对页面源码解析,使用XPath语法拿到所需内容


2.5 数据持久化

将RAM中的结果存储到磁盘或者数据库中


2.6 反爬机制

(写爬虫会遇到各种反爬机制,使用指定的反反爬措施破解)

a. 将爬虫伪装成浏览器

b. 封禁IP地址的网站一般使用代理IP:站大爷、芝麻代理、极光代理等

c. 文字反扒

d. AJAX异步加载

etc


2.7 rpa(机器人流程自动化)

使用拖拉拽(实现了某些功能的模块)的形式实现流程自动化(爬虫等)

如:八爪鱼、影刀等


3. 爬虫知识点预备


3.1 静态页面和动态页面

(1)静态页面:网页一旦生成,里面的内容不会自动地发生变化。页面中包含:html(展示页面内容)、CSS样式(渲染html)、JavaScript(渲染html)

(2)动态页面:网页生成后,页面内容还会自动发生变化。页面内容和数据库进行联通,数据库中变,页面就变。一般动态页面都会应用AJAX异步加载


3.2 HTTP和HTTPS

HTTP协议(超文本传输协议),Web服务器和客户端之间进行数据传输都是明文形式

发展历史:网景公司->谋智->火狐浏览器。网景公司根据HTTP协议做了改进->HTTPS

https = http + ssl

SSL加密协议->将Web服务器和客户端的数据进行加密


3.3 cookie

(1)作用:将用户的账号密码以某些形式保存在本地

(2)性质:时效性

(3)在爬虫中cookie的作用:将本地的请求和远程服务器中保存的账号密码做对比


3.4 GET和POST

两种和服务器对话的方式

(1)GET:requests利用GET请求方式向服务器发送需求(加密机制很简单甚至不加密)

(2)POST:向服务器发送内容,例如账号密码(某个网站注册登录账号密码)


4. requests的基础用法

requests是Python实现的简单易用的能够请求网页的三方模块


4.1 模块安装


4.1.1 安装三方模块准备

(1)如果Terminal中显示的ps,安装三方模块会直接安装到本机主环境。使用venv\Scripts\activate激活虚拟环境

(2)修改微软的powershell策略组:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser


4.1.2 修改镜像源

镜像源:存储python三方模块的仓库,python的三方模块所有人都可以制作发布

输入代码:pip config set global.index-url https://pypi.douban.com/simple


4.1.3 requests模块安装

Windows:pip install requests

Mac、linux:pip3 install requests

RIGHT Result:

Successfully installed certifi-2021.10.8 charset-normalizer-2.0.12 idna-3.3 requests-2.27.1 urllib3-1.26.9

4.2 模块使用


4.2.1 请求网址

RIGHT Example:

URL = 'http://www.baidu.com/'
# 请求百度服务器+获取百度服务器响应结果
resp = requests.get(url=URL) # 最好使用关键字参数传参,以免有的网址过长看起来不方便
print(resp)

4.2.2 查看状态码

告诉我们现在服务器的状态:status_code

RIGHT Example:

print(resp.status_code)	# 200

常见状态码:

200:爬虫可用

403:爬虫被服务器拒绝了

404:资源丢失

500:服务器崩溃

完整状态码列表见附录


4.2.3 查看cookie

RIGHT Example:

print(resp.cookies) # <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

4.2.4 页面源码中的乱码

响应结果使用的编码方式默认是ASCII(ISO-8859-1),它不支持中文

具体是哪个编码方式由网页源码决定(腾讯系网站喜欢用gbk)

RIGHT Example:

resp.encoding = 'utf-8'

4.2.5 查看页面源代码(字符串形式)

RIGHT Example:

print(resp.text)

注意:如果页面是动态页面,开发人员工具显示的代码一定是异步加载完之后的代码


4.2.6 查看页面源代码(二进制形式)

用于图片、音频、视频等

二进制形式:b’xxxxx’

RIGHT Example:

print(resp.content)

5. 爬虫伪装

User-Agent作用:将爬虫伪装成浏览器在这里插入图片描述
RIGHT Example:

Headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
}

URL = 'https://www.baidu.com/'
resp = requests.get(url=URL, headers=Headers)
if resp.status_code == 200:
    resp.encoding = 'utf-8'
    print(resp.text)
else:
    print(resp.status_code)

6. 使用API

RIGHT Example:

import requests
import json

# api接口中的数据是使用json进行传输的
content = input('请输入一个垃圾:')

# api接口请求地址和参数之间使用?连接,参数以key=value的形式传入,参数和参数之间使用&连接
URL = f'http://api.tianapi.com/lajifenlei/index?key=76677c3f312f8aa299d587fd52deaf84&word={content}'

# 大部分API接口没有反爬机制
resp = requests.get(url=URL)
print(resp.text, type(resp.text))

# 序列化:loads()
data = json.loads(resp.text)
print(data, type(data))

# 获取json数据中有用信息
for i in data['newslist']:
    print(i['explain'])

APPLICATION 获取周公解梦的数据:

num = 10
word = '操场'
URL = f'http://api.tianapi.com/dream/index?key=76677c3f312f8aa299d587fd52deaf84&num={num}&word={word}'

resp = requests.get(url=URL)

data = json.loads(resp.text)

for i in data['newslist']:
    print(i['result'], end='\n')  

7. 图片、视频、音频的数据持久化

RIGHT Example:

URL = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'
resp = requests.get(url=URL)
print(resp.content)
with open('baidu.png', 'wb') as f3:
    f3.write(resp.content)

附录:状态码在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sprite.Nym

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

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

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

打赏作者

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

抵扣说明:

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

余额充值