大数据—爬虫基础

目录


爬虫是什么?

  • 爬虫(Crawler),也被称为网络爬虫、网页蜘蛛或网络机器人,是一种按照既定规则在网络上自动爬取信息的程序或脚本。它模拟人类操作客户端(如浏览器或APP)向服务器发起网络请求,以抓取数据。爬虫可以用于网站数据采集内容监测等多种用途。

爬虫的工作流程:

  1. 选取目标数据源:确定要爬取的网站或网页。
  2. 发起网络请求:模拟浏览器向目标网站发送请求。
  3. 获取响应数据:接收目标网站返回的响应数据,通常是HTML、XML或JSON格式的数据。
  4. 解析数据:使用解析器(如BeautifulSoup、lxml等)解析响应数据,提取出所需的信息。
  5. 存储数据:将提取的信息存储到数据库、文件或其他存储介质中。

发送网络请求

使用requests库:

导入库:

  • import requests 

请求类型: 

get请求:

  • ret = requests.get(url = url)

post请求:

  • ret = requests.post(url = url)

 UA伪装:

有的网站有反爬机制,这时候就要模拟成正常客户端的请求去访问。

添加请求头:UA伪装:

  • ret = requests.get(url = url,headers = {"User-Agent": "xxx"})    “xxx”处省略

修改编码格式: 

爬取数据时,如果返回的是乱码,则要修改编码格式

  •  ret.encoding='utf-8'

查看是否请求成功

  • print(ret)

返回200为成功,非200则请求失败。


解析数据

常用解析库:

  • re 正则表达式 
  • Beautiful Soup
  • xpath

正则表达式 

导入库:

  • import re

正则表达式元字符

  • " . "          匹配任意字符 ( \n除外 )
  • " [ ] "        匹配[ ]中列举的字符
  • " \d "        匹配数字,即0-9
  • " \D "       匹配⾮数字
  • " \s "        匹配空⽩,即空格,tab键
  • " \S "       匹配⾮空⽩字符    
  • " \w "       匹配单词字符,即a-z、A-Z、0-9
  • " \W "      匹配⾮单词字符
  • " \ "         转义字符,用于匹配特殊字符,如 \. 匹配点字符
  • " ( ) "       提取括号内匹配的数据
  • " ^ "        匹配字符串开始
  • "        匹配字符串结束
  • " * "         匹配前面的子表达式零次或多次
  • " + "        匹配前面的子表达式一次或多次
  • " ? "        匹配前面的子表达式零次或一次
  • "{n}"       匹配前面的子表达式n次
  • "{n, }"     匹配前面的子表达式n次或更多次
  • "{n,m}"   匹配前面的子表达式n到m次
  • " | "         或,匹配左右两边任意一个表达式

常用函数

函数说明
re.match( )从字符串的起始位置匹配, 匹配成功, 返回一个匹配的对象, 否则返回None
re.match( )扫描整个字符串并返回第一个成功的匹配
re.findall( )在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表, 如果没有找到匹配的, 则返回空列表
re.split( )将一个字符串按照正则表达式匹配结果进行分割, 返回列表类型
re.finditer( )在字符串中找到正则表达式所匹配的所有子串, 并把它们作为一个迭代器返回
re.sub( ) 把字符串中所有匹配正则表达式的地方替换成新的字符串
re.complie( ) 将正则表达式传入, 返回一个匹配对象, 一般与其他方法组合使用

Beautiful Soup

导入库:

  • from bs4 import BeautifulSoup

转成BeautifulSoup对象

  • soup = BeautfiulSoup(ret.text)

find_all()函数

  • find_all() 方法用于查找文档中所有匹配的标签。它会返回一个包含所有匹配项的列表。

参数 :

find_all(name, attrs, recursive, string, **kwargs)

  • name:要查找的标签名。
  • attrs:一个字典,用于指定要查找的标签的属性。
  • recursive:是否递归搜索子标签。默认为 True。
  • string:要查找的文本内容。
  • **kwargs:其他关键字参数,如 class_(注意有一个下划线)用于查找具有特定类的标签。

find()函数

  • find() 方法与 find_all() 类似,但它只返回第一个匹配的标签(而不是一个列表)。如果没有找到匹配的标签,则返回 None。

用法:

  • 与 find_all() 相同,但返回单个结果或 None。

查找第一个<p>标签

soup.find('p')

查找所有<p>标签  

soup.find_all('p')      

查找ID为'my-id'的元素  

soup.find(id='my-id') 

注意:类名作为参数时要使用'class_',因为class是Python的关键字

soup.find_all(class_='my-class')


select() 

方法使用CSS选择器来定位元素。

查找所有<p>标签 

soup.select('p') 

查找ID为'my-id'的元素  

soup.select('#my-id')          

 查找所有类名为'my-class'的元素  

soup.select('.my-class')       

 查找所有类名为'my-class'的<p>标签  

soup.select('p.my-class')           

查找所有<div>标签下的直接子元素<p>  

soup.select('div > p')  

查找所有具有href属性的<a>标签  

soup.select('a[href]')  

查找href属性以'http://example.com'开头的<a>标签

soup.select('a[href^="http://example.com"]') 

xpath库:

导入xpath库:

import xpath

常用参数:

 从根节点的所有节点
// "从匹配选择的当前节点选择文档中的节点,不考虑他们的位置(取子孙节点)
"  选取当前节点
.. "  选取当前节点的父节点
选取属性
" * "匹配任意节点
/text () "获取Element对象的元素内容( 文本 )
/@ "获取标签中的属性名的内容
[ ] "筛选符合条件的节点

1. 选择所有节点:
使用双斜杠//选择文档中的所有节点,如://node()
2. 按属性选择节点:
使用方括号[]和@符号选择具有特定属性值的节点,例如://book[@category="children"]
3. 使用逻辑运算符选择节点:
使用and、or、not等逻辑运算符选择节点,例如://book[price<10 and @category="children"]

# 导入xpath库
import  xpath

# 解析XML字符串
html = ertee.HYML(ret .text)

# xxx为解析式
xp = html .xpath("xxx")

print(xp)
  • 55
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lyx52Hertz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值