Python爬虫(数据提取)

数据提取概述

 

认识xml以及html的区别?

    xml: 可扩展标记语言        为了传输和存储数据,侧重点是在于数据内容本身

    html: 超文本标记语言       为了更好的显示数据.侧重点是为了显示

 

常用的数据解析方法?

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

 

数据提取

正则表达式:描述了一种字符串匹配的模式.可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出某个条件的子串

模式:一种特定的字符串模式,这个模式是通过一些特殊符号组成的

功能:

  • 数据验证
  • 数据检索
  • 数据隐藏
  • 数据过滤

 表达式语法

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

 watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

 

 

re模块

re.match模块

import  re
if __name__ == '__main__':
   """. 匹配任意字符"""
   result = re.match('..','CEO')
   if result != None:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """[]匹配[]中列举的一个字符"""
   result = re.match('C[EFT]','CEO')
   if result != None:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """\d 匹配数字,即0-9, \d等价于[0-9]"""
   result = re.match('C\dO','C2O')
   if result != None:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """\D 匹配非数字"""
   result = re.match('C\DO','CEO')
   if result != None:
       print('匹配成功',result.group())
   else:
       print('匹配失败')
   """\s 匹配空白,即空格,tab键,换行"""
   result = re.match('C\sO','C O')
   result = re.match('C\sO','C\nO')
   result = re.match('C\sO','C\tO')
   if result != None:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """\S 匹配非空白"""
   result = re.match('C\SO','CO')
   if result != None:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """\w 匹配特殊字符"""
   result = re.match('C\wO','C!O')
   if result != None:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """\W 匹配特殊字符"""
   result = re.match('C\WO', 'CEO')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """ * 匹配前一个字符出现0次或者无限次,可有可无"""
   result = re.match('[A-Z][a-z]*','Hello')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """ + 匹配前一个字符出现1次或者无限次,至少有1次"""
   result = re.match('[A-Z][a-z]+','Hi')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """ ? 匹配前一个字符出现1次或者0次,要么有1次要么没有"""
   result = re.match('https?','http')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """{m}  匹配前一个字符出现m次"""
   result = re.match('[A-Za-z0-9_]{8}','sdafad1231')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """{m,n} 匹配前一个字符出现从m到n次"""
   result = re.match('[A-Za-z0-9_]{8,20}','sdafad1231')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """{m,n} 匹配前一个字符出现至多m次"""
   result = re.match('[A-Za-z0-9_]{,20}','sdafad1231')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """ ^ 匹配字符串开头"""
   result = re.match('^\d.*','110')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """ $ 匹配字符串结尾"""
   #需求: 必须是数字结尾
   result = re.match('.*\d$','hello1')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')





   """ ^和$ 一起使用"""
   result = re.match('^[1-9]\d{8}$','122345678')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')



   """[^aeiou] : 取反 不包括aeiou的字符"""
   result = re.match('[^aeiou]','a')
   if result != None:
       print('匹配成功', result.group())
   else:
       print('匹配失败')

  #re.match方法默认使用的是贪婪匹配
   #非贪婪匹配: .+?   .*? 满足的字符越少越好
   result = re.match('#.+?#','#幸福#是奋斗出来的')
   if result:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """匹配11位手机号或者3到4位区号,7-8位电话"""

   result = re.match("^1[3-9]\d{9}$ | ^0\d{2,3}-[^0]\d{6,7}$","021-1231312")
   if result:
       print('匹配成功',result.group())
   else:
       print('匹配失败')



   """(a,b)将括号中字符作为一个分组"""
   #匹配出163,126,qq等邮箱
   #\ 转义符  取消特殊意义
   result = re.match('^([a-zA-Z0-9_]{3,})@(126 |163|qq)\.com','hello.163.com')
   if result:
       print('匹配成功',result.group())
   else:
       print('匹配失败')

jsonpath模块数据提取

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

import requests
import jsonpath
import json

# 获取拉勾网城市json字符串
url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'

# 准备请求头
headers = {
    "User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
}

# 发送请求
response =requests.get(url, headers=headers)

# 获取 json 响应数据,数据类型为:dict
json_dict = response.json()

# 从根节点开始,获取所有key为name的值
city_list = jsonpath.jsonpath(json_dict, '$..name')

# 写入文件
with open('city_name.txt','w', encoding='utf-8') as f:
    f.write(str(city_list))

 xpath-数据提取

浏览器安装插件 Xpath

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值