一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
from bs4 import BeautifulSoup
- find 方法返回一个解析完毕的对象
- findall 方法返回的是解析列表list
- select 方法返回的是解析列表list
- 获取属性的方法: get(‘属性名字’)
- 和获取文本的方法: get_text()
- 需要知道使用bs4时,需要指明解析器 一般是lxml
#创建 Beautiful Soup 对象
# soup = BeautifulSoup(html)
#打开本地 HTML 文件的方式来创建对象
#soup = BeautifulSoup(open('index.html'))
soup = BeautifulSoup(html_str, 'lxml') # 常用的方式
#格式化输出 soup 对象的内容
result = soup.prettify()
常用方法如下:
find_all(name, attrs, recursive, text, **kwargs)
CSS选择器
(1)通过标签选择器查找
print soup.select('title')
#[<title>The Dormouse's story</title>]
(2)通过类选择器查找
print soup.select('.sister')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
(3)通过 id 选择器查找
print soup.select('#link1')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]
(4)层级选择器 查找
print soup.select('p #link1')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]
(5)通过属性选择器查找
print soup.select('a[href="http://example.com/elsie"]')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]
(6) 获取文本内容 get_text()
soup = BeautifulSoup(html, 'lxml')
print type(soup.select('title'))
print soup.select('title')[0].get_text()
for title in soup.select('title'):
print title.get_text()
(7) 获取属性 get('属性的名字')
soup = BeautifulSoup(html, 'lxml')
print type(soup.select('a'))
print soup.select('a')[0].get('href')
3、xpath的使用
一般与lxml 一起使用;
平日里最常用到的是xpath,因为xpath这种数据解析的通用性比较强,不止在Python中可以使用xpath,在其它的编程语言中也会使用。
xml库的安装
pip install lxml
lxml的导包
from lxml import etree
lxml转换解析类型的方法:etree.HTML(text)
lxml解析数据的方法:data.xpath(“//div/text()”)
需要注意lxml提取完毕数据的数据类型都是列表类型;
如果数据比较复杂:
先提取大节点,在遍历小节点操作,把转化后的element对象转化为字符串,返回bytes类型结果 etree.tostring(element)
返回的是element对象可以继续使用xpath方法,对此我们可以在后面的数据提取过程中:先根据某个标签进行分组,分组之后再进行数据的提取。
发现结果是一个element对象,这个对象能够继续使用xpath方法:要注意的是 xpath的语法就变成了在此element的路径进行下一步的匹配 使用 ./ (点斜杠) 表示当前路径。
xpath的节点关系:根节点,子节点,父节点,兄弟节点,子节点,后代节点
xpath的重点语法获取任意节点://
xpath的重点语法根据属性获取节点:标签[@属性 = ‘值’]
xpath的获取节点属性值:@属性值
xpath的获取节点文本值:text()
xpath的使用方法: 如果没有取到想要的结果,再去看他的父元素,一直往上找。
属性匹配
匹配时可以用@符号进行属性过滤,例如匹配li下属性class为item-5的内容
//li[@class="item-5"]
文本获取
有两种方法:一是获取文本所在节点后直接获取文本,二是使用 //。
第二种方法会获取到补全代码时换行产生的特殊字符,推荐使用第一种方法,可以保证获取的结果是整洁的。
# 第一种
from lxml import etree
html_data = html.xpath('//li[@class="item-1"]/a/text()')
print(html_data)
# 第二种
html_data = html.xpath('//li[@class="item-1"]//text()')
print(html_data)
属性获取
@符号相当于过滤器,可以直接获取节点的属性值
result = html.xpath('//li/a/@href')
print(result)
# 运行结果:['https://s1.bdstatic.com/', 'https://s2.bdstatic.com/', 'https://s3.bdstatic.com/', 'https://s4.bdstatic.com/', 'https://s5.bdstatic.com/', 'https://s6.bdstatic.com/']
属性多值匹配
某些节点的某个属性可能有多个值:
from lxml import etree
text = '''
<li class="zxc asd wer"><a href="https://s2.bdstatic.com/">1 item</a></li>
<li class="ddd asd eee"><a href="https://s3.bdstatic.com/">2 item</a></li>
'''
html = etree.HTML(text)
result = html.xpath('//li[contains(@class, "asd")]/a/text()')
print(result)
# 运行结果:['1 item', '2 item']
多属性匹配
当前节点有多个属性时,需要同时进行匹配:
from lxml import etree
text = '''
<li class="zxc asd wer" name="222"><a href="https://s2.bdstatic.com/">1 item</a></li>
<li class="ddd zxc eee" name="111"><a href="https://s3.bdstatic.com/">2 item</a></li>
'''
html = etree.HTML(text)
result = html.xpath('//li[contains(@class, "zxc") and @name="111"]/a/text()')
print(result)
# 运行结果:['2 item']
4、什么是PyQuery?
PyQuery是类似于jQuery的网页解析工具,是仿照 jQuery 实现的,语法与 jQuery 几乎相同。
使用jQuery的风格来遍历xml文档,它使用lxml操作html的xml文档,和解析库xpath与Beautiful Soup比起来更加灵活简便,且增加了添加类和移除节点的操作,这些操作有时会为提取信息带来极大的便利。
在使用之前,请先安装好qyquery库;
使用如下终端命令安装
pip install pyquery
安装完成后导包
from pyquery import PyQuery as pq
初始化
和Beautiul Soup一样,在初始化pyquery的时候,也需要传入html文本来初始化一个pyquery对象。
初始化的时候一般有三种传入方式:传入字符串、传入URL、传入html文件;最常用的初始化方式还是以字符串的形式传递。
- 字符串初始化
html = '''
<div>
<ul>
<li class="item-0">first-item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item=-0 active"><a href="link3.html"><span class=""bold>third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc)
print(type(doc))
print(doc('li'))
首先引入PyQuery对象,取名为pq。然后声明一个长HTML字符串,并将其当作参数传给PyQuery类,这样就成功的进行了初始化。
接下来将css选择器作为参数传入初始化对象,在这个示例中我们传入li节点,这样就可以选择所有的li节点.。
- URL初始化
将URL作为参数传入初始化对象;
from pyquery import PyQuery as pq
doc = pq('https://www.baidu.com', encoding='utf-8')
print(doc)
print(type(doc))
print(doc('title'))
运行上面的代码你会发现,我们成功的获取到了百度的title节点和网页信息。
PyQuery对象会先请求这个URL,然后用得到的HTML内容完成初始化,这其实就相当于网页源代码以字符串的形式传递给初始化对象。
- 文件初始化
传递本地文件名,将参数指定为filename即可。
from pyquery import PyQuery as pq
doc = pq(filename='baidu.html')
print(doc)
print(type(doc))
print(doc('title'))
一般来说,在网页里面我们需要获取的信息有两类:一类是文本内容,另一类是节点属性值。
- 获取属性
获取到某个PyQuery类型的节点之后,就可以通过attr()方法来获取属性。
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.list .item-0.active a')
print(a.attr('href'))
先获取class为list下面的class为item-0 active的节点下的a节点,这时变量a是PyQuery类型,再调用attr()方法并传入属性值href。
也可以通过调用attr属性来获取属性,输出结果与上面的代码是一样的;
print(a.attr.href)
我们也可以获取到所有a节点的属性,示例:
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first-item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class=""bold>third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('a').items()
for item in a:
print(item.attr('href'))
有一个需要注意的地方!
如果代码这样写:
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('a')
print(a.attr('href'))
运行之后,你会发现只获取到第一个a节点的href属性!这是需要注意的;
- 提取文本
提取文本与提取属性的逻辑是一样的,首先获取到class为PyQuery的节点,再调用text()方法获取文本。
首先来获取一个节点的文本内容:
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first-item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class=""bold>third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.list .item-0.active a')
print(a.text())
运行之后成功获取a节点的文本内容,接下来获取多个li节点的文本内容:
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first-item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class=""bold>third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('li')
print(items.text())
该代码成功获取到了所有节点名称为li的文本内容,中间用空格隔开。
如果你想要一个一个获取,那还是少不了生成器的;
### 一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
### 二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)
### 三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
![](https://img-blog.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**