栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫四种数据解析(XPath解析数据&BeautifulSoup解析数据&re正则表达式&pyquery解析数据)(4)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫四种数据解析(XPath解析数据&BeautifulSoup解析数据&re正则表达式&pyquery解析数据)(4)

文章目录
  • 前言
  • 一、XPath解析数据
    • 1.XPath
    • 2.xml的树形结构
    • 3.使用XPath选取节点
  • 二、BeautifulSoup解析数据
    • 1.BeautifulSoup简介
    • 2.解析器
    • 3.代码:
  • 三、用beautifulsoup爬淘宝首页
  • 四、re正则表达式
  • 五、pyquery解析数据
    • 1.第一种创建方式
    • 2.第二种创建方式
    • 3.第三种创建方式
  • 六、pyquery的使用
  • 总结


前言

python学习笔记 (仅供学习使用)


一、XPath解析数据 1.XPath

全称: XML Path Language是一种小型的查询语言
是一门在XML文档中查找信息的语言

XPath的优点
可在XML中查找信息
支持HTML的查找
可通过元素和属性进行导航
Xpath需要依赖lxml库
安装方式 : pip3 install lxml

2.xml的树形结构

3.使用XPath选取节点


xpath的使用:

import  requests
from lxml import  etree
# url='https://www.qidian.com/rank/yuepiao'
url = 'https://m.qidian.com/'
headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'}

#发送请求
resp=requests.get(url,headers)
e=etree.HTML(resp.text)  #类型转换 将str类型转换成class 'lxml.etree._Element'
#print(type(e))
print(resp.text)
# names=e.xpath('//div[@]/h4/a.txt/text()')
# authors=e.xpath('//p[@]/a.txt[1]/text()')
names=e.xpath('//div[@]/ol/li/a[1]/figcaption[1]/text()')
print(names)
# print(authors)
# for name,author in zip(names,authors):
#     print(name,":",author)


# //div[@]/ol/li/a[1]/figcaption[1]/text()
# https://m.qidian.com/
二、BeautifulSoup解析数据 1.BeautifulSoup简介

BeautifulSoup
是一个可以从HTML或XML文件中提取数据的Python库。其功能简单而强大、容错能力高、文档相对完善,清晰易懂
非Python标准模块,需要安装才能使用
安装方式
pip3 install bs4
测试方式
import bs4

2.解析器

BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果不安装第三方解析器,则Python会使用默认解析器

3.代码:
from  bs4 import  BeautifulSoup

html='''
    
        
            小周周
        
        
            

欢迎大家来到马士兵教育 百度 ''' #bs=BeautifulSoup(html,'html.parser') bs=BeautifulSoup(html,'lxml') print(bs.title) #获取标签 print(bs.h1.attrs) #获取h1标签的所有属性 #获取单个属性 print(bs.h1.get('class')) print(bs.h1['class']) print(bs.a['href']) #获取文本内容 print(bs.title.text) print(bs.title.string) #获取内容 print('--------',bs.h2.string) #获取到h2标签中的注释的文本内容 获取所有内容 print(bs.h2.text) #因为h2标签中没有正而八经的文本内容 获取文本内容

run:

小周周
{'class': ['info', 'bg'], 'float': 'left'}
['info', 'bg']
['info', 'bg']
http://www.baidu.com
小周周
小周周
-------- 注释的内容

two:

from  bs4 import  BeautifulSoup

html='''
    你好啊
    欢迎来到异世界
    
        好好学习,天天向上
        官网
    
    你好,Python
'''
bs=BeautifulSoup(html,'lxml')
print(bs.title,type(bs.title))
print(bs.find('div',class_='info'),type(bs.find('div',class_='info')))  #获取第一个满足条件的标签
print('--------------------------------------')
print(bs.find_all('div',class_='info'))  #得到的是一个标签的列表
print('--------------------------------------')
for item in bs.find_all('div',class_='info'):
    print(item,type(item))
print('--------------------------------------')
print(bs.find_all('div',attrs={'float':'right'}))

print('===============CSS选择器=======================')
print(bs.select("#gb"))
print('--------------------------------------')
print(bs.select('.info'))
print('--------------------------------------')
print(bs.select('div>span'))  #div下面的span
print('--------------------------------------')
print(bs.select('div.info>span'))

for item in bs.select('div.info>span'):
    print(item.text)

run:

你好啊 
欢迎来到异世界
-------------------------------------- [
欢迎来到异世界
,
好好学习,天天向上 官网
] --------------------------------------
欢迎来到异世界
好好学习,天天向上 官网
-------------------------------------- [
好好学习,天天向上 官网
] ===============CSS选择器======================= [
好好学习,天天向上 官网
] -------------------------------------- [
欢迎来到异世界
,
好好学习,天天向上 官网
] -------------------------------------- [好好学习,天天向上] -------------------------------------- [好好学习,天天向上] 好好学习,天天向上
三、用beautifulsoup爬淘宝首页
import  requests
from  bs4 import  BeautifulSoup
url='https://www.taobao.com/'
headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'}
resp=requests.get(url,headers)
# print(resp.text)
bs=BeautifulSoup(resp.text,'lxml')
a_list=bs.find_all('a')
#print(len(a_list))
for a in a_list:
    url=a.get('href')
    #print(url)
    if url==None:
        continue
    if url.startswith('http') or url.startswith('https'):
        print(url)

run:

http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=T恤&refpid=420462_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f67
https://s.taobao.com/search?q=%E5%A5%B3%E9%9E%8B&refpid=420466_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f68
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=短裤&refpid=430145_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f69
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=半身裙&refpid=430146_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f70
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=男士外套&refpid=430147_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f70
https://s.taobao.com/search?q=墙纸&refpid=430148_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f70
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=行车记录仪&refpid=420467_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f69
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=男鞋&refpid=430144_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f69
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=耳机&refpid=420463_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f67
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=女包&refpid=420464_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f68
http://s.taobao.com/search?spm=1.7274553.1997520241-2.2.TpEKPQ&q=沙发&refpid=420465_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f68
https://market.m.taobao.com/app/fdilab/download-page/main/index.html

四、re正则表达式

是一个特殊的字符序列,它能帮助用户便捷地检查一个字符串是否与某种模式匹配。
Python的正则模块是re,是Python的内置模块,不需要安装,导入即可

特殊序列:

正则处理函数:

import  re
s='Istudy study Python3.8 every day'
print('----------------match方法,从起始位置开始匹配------------')
print(re.match('I',s).group())
print(re.match('w',s).group())
print(re.match('.',s).group())

print('---------------search方法,从任意位置开始匹配,匹配第一个---------------')
print(re.search('study',s).group())
print(re.search('sw',s).group())

print('---------------findall方法,从任意位置开始匹配,匹配多个-----------------')
print(re.findall('y',s))  #结果为列表
print(re.findall('Python',s))
print(re.findall('Pw+.d',s))
print(re.findall('P.+d',s))

print('--------------sub方法的使用,替换功能-------------------------')
print(re.sub('study','like',s))
print(re.sub('sw+','like',s))


爬虫糗事百科中的视频:

import  requests
import  re
url='https://www.qiushibaike.com/video/'
headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'}
resp=requests.get(url,headers=headers)
#print(resp.text)
info=re.findall('',resp.text)
#print(info)
lst=[]
for item in info:
    lst.append('https:'+item)
#print(lst)

count=0
for item in lst:
    count+=1
    resp=requests.get(item,headers=headers)
    with open('video/'+str(count)+'.mp4','wb') as file:
        file.write(resp.content)
print('视频下载完毕')
五、pyquery解析数据

pyquery库是jQuery的Python实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好
前提条件:
你对CSS选择器与JQuery有所了解

非Python标准模块,需要安装
安装方式
pip3 install pyquery
测试方式
Import pyquery

1.第一种创建方式
from  pyquery import  PyQuery as py
html='''
    
        
            PyQuery
        
        
            PyQuery
        
    
'''
doc=py(html)  #创建PyQuery的对象,实际上就是在进行一个类型转换,将str类型转成PyQuery类型
print(doc)
print(type(doc))
print(type(html))
print(doc('title'))

run:


        
            PyQuery
        
        
            

PyQuery

PyQuery
2.第二种创建方式
from  pyquery import  PyQuery
doc=PyQuery(url='http://www.baidu.com',encoding='utf-8')
print(doc('title'))

run:

百度一下,你就知道
3.第三种创建方式
from  pyquery import  PyQuery
doc=PyQuery(filename='demo.html')
print(doc)
print(doc('h1'))

run:


        
            PyQuery
        
        
            

PyQuery

PyQuery

六、pyquery的使用

from  pyquery import  PyQuery
html='''
    
        
            PyQuery
        
        
            
                小周周
                欢迎来到异世界
                我是div中的文本
            
            Python学习
        
    
'''
doc=PyQuery(html)
#获取当前节点
print(doc("#main"))

#获取父节点,子节点,兄弟节点
print('-----------父节点----------------')
print(doc("#main").parent())
print('-----------子节点----------------')
print(doc("#main").children())
print('-------------兄弟节点------------------')
print(doc("#main").siblings())

print('------------------获取属性---------------')
print(doc('a').attr('href'))

print('------------获取标签的内容----------------')
print(doc("#main").html())
print('-------------------------')
print(doc("#main").text())

run:


            
-----------父节点----------------

            
            

Python学习

-----------子节点---------------- 小周周

欢迎来到异世界

我是div中的文本
-------------兄弟节点------------------

Python学习

------------------获取属性--------------- http://www.baidu.com ------------获取标签的内容---------------- 小周周

欢迎来到异世界

我是div中的文本
------------------------- 小周周 欢迎来到异世界 我是div中的文本

总结
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号