- 前言
- 一、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
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
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果不安装第三方解析器,则Python会使用默认解析器
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:
三、用beautifulsoup爬淘宝首页你好啊 欢迎来到异世界-------------------------------------- [ 欢迎来到异世界,好好学习,天天向上] --------------------------------------官网 欢迎来到异世界 好好学习,天天向上官网 -------------------------------------- [ 好好学习,天天向上] ===============CSS选择器======================= [官网 好好学习,天天向上] -------------------------------------- [官网 欢迎来到异世界,好好学习,天天向上] -------------------------------------- [好好学习,天天向上] -------------------------------------- [好好学习,天天向上] 好好学习,天天向上官网
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
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中的文本
总结



