python爬虫学习数据解析笔记

主要包括以下四种解析方式:re解析、bs4解析、xpath解析、 pyquery解析

 一、正则表达式

Regular Expression,正则表达式一种使用表达式的方式对字符串进行匹配的语法规则,语法是使用元字符进行排列组合用来匹配字符串,在线测试正则表达式网址:https://tool.oschina.net/regex/

元字符:具有固定含义的特殊符号

1  .     匹配换行符以外的任意字符
2  \w    匹配字母或数字或下划线    \W  匹配非字母或数字或下划线
3  \s    匹配任意的空白符          \S 匹配非空白符
4  \d    匹配数字                 \D  匹配非数字
5  \n    匹配一个换行符
6  \t    匹配一个制表符
7  ^     匹配字符串的开始
8  $     匹配字符串的结尾
9  a|b   匹配字符a或b
10  ()   匹配括号内表达式,也表示一个组
11 [...] 匹配字符组中的字符       [^...] 匹配除了字符组中字符的所有字符

量词:控制前面的元字符出现的次数

*    重复零次或更多次
+    重复一次或更多次
?   重复零次或一次
{n}  重复n次
{n,} 重复n次或更多次
{n,m}重复n到m次

  贪婪匹配和惰性匹配

.*      贪婪匹配
.*?     惰性匹配

二、re模块

import re
# result = re.findall("a", "ddsallakkksa")
# print(result)     #['a', 'a', 'a']

# result = re.finditer(r"\d+", "我今年18岁,我有2000000块")
# for item in result:   #从迭代器中拿到内容
#     print(item.group())   #从匹配到的结果中拿到数据    18  2000000

#search只会匹配到第一次匹配的内容
# result = re.search(r"\d+", "我叫周杰伦,今年32岁,我的班级是3年2班")   #<re.Match object; span=(8, 10), match='32'>
# print(result.group())    #32

#match,在匹配的时候是从字符串开头进行匹配的,类似于正则前面加上了^
result = re.match(r"\d+", "我叫周杰伦,今年32岁,我的班级是3年2班")
print(result)  #None

#预加载,提前把正则对象加载完毕
obj = re.compile(r"\d+")   #直接把加载好的正则进行使用
result = obj.findall("我叫周杰伦,今年32岁,我的班级是3年2班")
print(result)  #['32', '3', '2']

 三、bs解析

from bs4 import BeautifulSoup
html ="""
<ul>
    <li><a href="zhangwuji.com">张无忌</a></li>
    <li id="abc"><a href="zhouxingchi.com">周星驰</a></li>
    <li><a href="zhubajie.com">猪八戒</a></li>
    <li><a href="wuzetian.com">武则天</a></li>
</ul>    
"""
#初始化BeautifulSoup对象
page = BeautifulSoup(html,"html.parser")
# page.find("标签名",attrs={"属性":"值"})   #查找某个元素只会找到一个结果
# page.find_all("标签名",attrs={"属性":"值"})  #查出一堆结果
li = page.find("li", attrs={"id": "abc"})  #<li id="abc"><a href="zhouxingchi.com">周星驰</a></li>
a = li.find("a")   #<a href="zhouxingchi.com">周星驰</a>
print(a.text)    #周星驰
print(a.get("href"))   #zhouxingchi.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值