python爬虫学习

一、爬虫的概念

1.爬虫的概念

通过编写程序,模拟浏览器上网,在互联网上抓取数据的过程。

2.爬虫在使用场景上的分类

  • 通用爬虫:抓取一整章页面数据。

  • 聚焦爬虫:建立在通用爬虫基础之上,抓举页面中局部内容。

  • 增量式爬虫:检测网站上的数据更新状况。

3.robots协议

君子协议规定哪些可以被爬取,哪些不可以被爬取。

4.http协议

  • 概念:服务器和客户端进行数据交互的一种形式。

  • 常用请求头信息:User-Agent表示请求载体的身份标识;Connection:表示请求完毕之后,是断开链接还是保持链接。

  • 常用响应头信息:Content-Type表示服务器端响应回客户端的数据类型;

5.https协议

安全的超文本传输协议,使用到数据加密。

加密方式

  • 对称密钥加密:客户端指定加密方式,将密文和密钥一起发送给服务器端。

  • 非对称密钥加密:服务器端指定加密方式,并将加密方式发送给客户端,客户端进行加密后,之江密文发送给服务器端。服务器指定加密方式:公钥。服务器解密方式:私钥。

  • 证书密钥加密:https采用的加密方式。非对称密钥加密加上证书认证机构。证书认证机构对密钥进行数字签名

二、requests模块

1.概念

python原生的一款基于网络请求的模块,用来模拟浏览器发请求。

特点

  • 功能强大

  • 简单便捷

  • 效率高

2.如何使用

使用流程:指定url(网址)->发起请求(http或者https)->获取响应数据->持久化存储

案例一:爬取sogou首页的页面数据

爬取代码如下所示
import requests as rq
#爬取搜狗首页的页面数据

#step1: 指定url
url = "https://www.sogou.com/"
#step2: 发起请求, get方法会返回相应对象
rp = rq.get(url=url)#url表示针对哪一个模块发起请求;

#step3:响应数据
page_text = rp.text
print(page_text)

#step4:持久化存储,存储在本地
with open('./sogou.html', 'w', encoding='utf-8') as fp:
    fp.write(page_text)
print("爬取数据结束")

案例二:网页采集器

import requests as rq
#爬取搜狗首页的页面数据

#UA检测:门户网站的服务器检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器则正常
#如果是爬虫软件,则拒绝请求。

#UA伪装:让爬虫对应的请求载体伪装成某一款浏览器
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.70'#对应的浏览器的UserAgent
}

#step1: 指定url
url = "https://www.sogou.com/web?"
kw = '美国国家统计局'
param = {
    'query': kw
}
#step2: 发起请求, get方法会返回相应对象
rp = rq.get(url=url, params=param, headers=headers)#url表示针对哪一个模块发起请求;

#step3:响应数据
page_text = rp.text
print(page_text)

fileName = kw+'.html'
#step4:持久化存储
with open(fileName, 'w', encoding='utf-8') as fp:
    fp.write(page_text)
print("爬取数据结束")

三、数据解析

1.数据解析基本介绍

分类:

-正则

-bs4

-xpath

原理:

解析的局部文本内容都会在标签或者标签对应的属性值进行存储

  1. 进行指定标签的定位

  1. 标签或者标签对应的属性存储的数据值进行提取

2.bs4数据解析

原理:

  1. 实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

  1. 通过调用BeautifulSoup对象中相关属性或者方法进行标签定位和数据提取

属性和方法

#(1)
soup.tagName #返回的html中第一次出现的tagName标签
#例如
soup.a

#(2)
soup.find()
#1.
soup('div') = soup.div
#2.属性定位
soup.find('div', class_/id_/attr_='song')

#(3)
soup.find_all('tagName')#返回的html中所有的tagName标签

#(4)
soup.select(选择器(class/id/标签...))#返回一个列表
#例如
soup.select(‘.tang’)
#区分层级
#例如
soup.select('.tang>ul>li a')# 空格标识多个层级, “>”标识多个层级 

#(5)获取标签中文本内容
soup.a.text/.string/.get_text()
#.get_text()/.text获取标签中所有的文本内容
.String #只可以获取该标签下面的直系文本内容

3.xpath数据解析

实例化etree对象,并且要将为解析的页面源码加载到该对象中

调用etree对象中xpath方法结合着xpath表达式,实现标签的定位和内容的捕获

# /表示根节点 OR 表示一个层级
# //多个层级 OR 从任意位置开始定位

#属性定位
r = tree.xpath('//div[@class='song']')

#索引定位
r = tree.xpath('//div[@class='song']/p[3]') #索引是从1开始的

#取文本
r = tree.xpath('//div[@class='song']//li[3]/a/text()')#/text()去文本
#/text()获取标签中直系文本内容
#//text()非直系的文本内容

#去属性
r = tree.xpath('//div[@class='song']/img/@src')#/@src

四、scrapy框架

框架是集成了很多功能,并且具有很强通用的形式的项目模板

如何学习框架

学习框架封装的功能的用法

什么是scrapy

scrapy爬虫中封装后的框架,封装了高性能数据解析,存储,异步数据下载操作

1.scrapy基本使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值