赞
踩
python学习笔记 (仅供学习使用)
全称: 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[@class="book-mid-info"]/h4/a.txt/text()') # authors=e.xpath('//p[@class="author"]/a.txt[1]/text()') names=e.xpath('//div[@class="module-slide"]/ol/li/a[1]/figcaption[1]/text()') print(names) # print(authors) # for name,author in zip(names,authors): # print(name,":",author) # //div[@class="module-slide"]/ol/li/a[1]/figcaption[1]/text() # https://m.qidian.com/
BeautifulSoup
是一个可以从HTML或XML文件中提取数据的Python库。其功能简单而强大、容错能力高、文档相对完善,清晰易懂
非Python标准模块,需要安装才能使用
安装方式
pip3 install bs4
测试方式
import bs4
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果不安装第三方解析器,则Python会使用默认解析器
from bs4 import BeautifulSoup html=''' <html> <head> <title>小周周</title> </head> <body> <h1 class="info bg" float='left'>欢迎大家来到马士兵教育</h1> <a href="http://www.baidu.com"> 百度</a.txt> <h2><!--注释的内容--></h2> </body> </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:
<title>小周周</title>
{'class': ['info', 'bg'], 'float': 'left'}
['info', 'bg']
['info', 'bg']
http://www.baidu.com
小周周
小周周
-------- 注释的内容
two:
from bs4 import BeautifulSoup html=''' <title>你好啊</title> <div class="info" float="left">欢迎来到异世界</div> <div class="info" float="right" id="gb"> <span>好好学习,天天向上</span> <a.txt href="http://www.baidu.com">官网</a.txt> </div> <span>你好,Python</span> ''' 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:
<title>你好啊</title> <class 'bs4.element.Tag'> <div class="info" float="left">欢迎来到异世界</div> <class 'bs4.element.Tag'> -------------------------------------- [<div class="info" float="left">欢迎来到异世界</div>, <div class="info" float="right" id="gb"> <span>好好学习,天天向上</span> <a.txt href="http://www.baidu.com">官网</a.txt> </div>] -------------------------------------- <div class="info" float="left">欢迎来到异世界</div> <class 'bs4.element.Tag'> <div class="info" float="right" id="gb"> <span>好好学习,天天向上</span> <a.txt href="http://www.baidu.com">官网</a.txt> </div> <class 'bs4.element.Tag'> -------------------------------------- [<div class="info" float="right" id="gb"> <span>好好学习,天天向上</span> <a.txt href="http://www.baidu.com">官网</a.txt> </div>] ===============CSS选择器======================= [<div class="info" float="right" id="gb"> <span>好好学习,天天向上</span> <a.txt href="http://www.baidu.com">官网</a.txt> </div>] -------------------------------------- [<div class="info" float="left">欢迎来到异世界</div>, <div class="info" float="right" id="gb"> <span>好好学习,天天向上</span> <a.txt href="http://www.baidu.com">官网</a.txt> </div>] -------------------------------------- [<span>好好学习,天天向上</span>] -------------------------------------- [<span>好好学习,天天向上</span>] 好好学习,天天向上
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
是一个特殊的字符序列,它能帮助用户便捷地检查一个字符串是否与某种模式匹配。
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('s\w',s).group()) print('---------------findall方法,从任意位置开始匹配,匹配多个-----------------') print(re.findall('y',s)) #结果为列表 print(re.findall('Python',s)) print(re.findall('P\w+.\d',s)) print(re.findall('P.+\d',s)) print('--------------sub方法的使用,替换功能-------------------------') print(re.sub('study','like',s)) print(re.sub('s\w+','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('<source src="(.*)" type=\'video/mp4\' />',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库是jQuery的Python实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好
前提条件:
你对CSS选择器与JQuery有所了解
非Python标准模块,需要安装
安装方式
pip3 install pyquery
测试方式
Import pyquery
from pyquery import PyQuery as py html=''' <html> <head> <title>PyQuery</title> </head> <body> <h1>PyQuery</h1> </body> </html> ''' doc=py(html) #创建PyQuery的对象,实际上就是在进行一个类型转换,将str类型转成PyQuery类型 print(doc) print(type(doc)) print(type(html)) print(doc('title'))
run:
<html>
<head>
<title>PyQuery</title>
</head>
<body>
<h1>PyQuery</h1>
</body>
</html>
<class 'pyquery.pyquery.PyQuery'>
<class 'str'>
<title>PyQuery</title>
from pyquery import PyQuery
doc=PyQuery(url='http://www.baidu.com',encoding='utf-8')
print(doc('title'))
run:
<title>百度一下,你就知道</title>
from pyquery import PyQuery
doc=PyQuery(filename='demo.html')
print(doc)
print(doc('h1'))
run:
<html>
<head>
<title>PyQuery</title>
</head>
<body>
<h1>PyQuery</h1>
</body>
</html>
<h1>PyQuery</h1>
from pyquery import PyQuery html=''' <html> <head> <title>PyQuery</title> </head> <body> <div id="main"> <a href="http://www.baidu.com">小周周</a.txt> <h1>欢迎来到异世界</h1> 我是div中的文本 </div> <h2>Python学习</h2> </body> </html> ''' 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:
<div id="main"> <a href="http://www.baidu.com">小周周 <h1>欢迎来到异世界</h1> 我是div中的文本 </a></div> -----------父节点---------------- <body> <div id="main"> <a href="http://www.baidu.com">小周周 <h1>欢迎来到异世界</h1> 我是div中的文本 </a></div> <h2>Python学习</h2> </body> -----------子节点---------------- <a href="http://www.baidu.com">小周周 <h1>欢迎来到异世界</h1> 我是div中的文本 </a> -------------兄弟节点------------------ <h2>Python学习</h2> ------------------获取属性--------------- http://www.baidu.com ------------获取标签的内容---------------- <a href="http://www.baidu.com">小周周 <h1>欢迎来到异世界</h1> 我是div中的文本 </a> ------------------------- 小周周 欢迎来到异世界 我是div中的文本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。