前言
欢迎来到我的博客
个人主页:北岭敲键盘的荒漠猫-CSDN博客
本文整理python的爬虫解析库pyquery的语法
简洁快速的整理,建议有前端基础的人看
pyquery解析原理
pyquery的原理就是拿到网站的前端源码后,我们根据我们需求信息所在的标签进行筛选。
选出指定类的标签,或者指定id,指定标签内部的标签。
然后再从这些标签中进行提取我们的信息。
pyquery安装
输入命令
pip install pyquery
初始化
1.内置请求,现请求现处理
from pyquery import PyQuery as pq
doc=pq(url="http://xiaodi8.com/",encoding="utf-8")
print(doc("a"))
这里直接用内置的请求方式请求了网站,然后从中挑选出了a标签。
2.从文本中解析源代码
from pyquery import PyQuery as pq
doc=pq(filename="111.txt", encoding="utf-8")
print(doc("a"))
3.利用requests定制请求,再进行解析
from pyquery import PyQuery as pq
import requests
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
doc=pq(res.text)
print(doc("a"))
内容解析
之前说过,这个库的原理就是筛选相应内容所在的标签。
那么我们会对筛选标签的准确程度有很高的要求。
所以pyquery直接上了前端jquery的选择器相应的形式。
如果你有前端开发的经验,可以直接上手。
查阅文档:
jQuery 选择器_w3cschool
jquery在线手册|jQuery API中文手册|jQuery速查表|jQuery参考手册|jQuery API|jQuery在线文档|jQuery最新手册
基础用法跟css选择器几乎相同。
.aaa代表选择属于me类的标签
#bbb代表id为bbb的标签
*代表所有标签
from pyquery import PyQuery as pq
import requests
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
doc=pq(res.text)
print(doc("a"))
这串代码中的
doc=pq(res.text)
print(doc("a"))
实例化对象后,直接传入相关的选择规则即可。这里案例是选择出a标签
这里简单一提:具体详细的选择器可以查看文档或者看看我之前整理的css的基础选择器大体了解一下。
css选择器整理-CSDN博客
css复合选择器-CSDN博客
模糊匹配
有时候可能我们会遇到特别的情况,比如某些标签都有一个id属性。
这些id属性都有某个单词混在里面。
我们需要模糊匹配,就可以用下面模版。
doc('li[id*="hello"]') #id中含有hello的li标签
doc('li[id^="hello"]') #id中以hello开头的li标签
doc('li[id$="hello"]') #id中以hello结尾的li标签
取得数据内容
我们经过上一步内容的解析之后,我们可以看到我们得到的是相关的标签,而不是我们要的内容。
我们要的内容有两种情况,有时我们要的是这个标签中的某个属性,或者有时我们要的实际上就是标签中间的字。这时候就需要我们根据不同的需求来改编代码。
获取目标标签的属性
a标签是超链接,那么超链接通常是带有href指向指定网址的属性。我们尝试获取这些属性。
使用下面代码样式。
#导入库
from pyquery import PyQuery as pq
import requests
#请求网址
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
#实例化对象
doc=pq(res.text)
#筛选出a标签
lista=doc("a")
#把a标签的href属性一次迭代给a并输出
for a in lista.items():
print(a.attr("href"))
#最后这个代码也可以用这个形式
#print(a.attr.href)
获取目标内容
一个标签中间有时是写在里面一些文字内容的。
我们想要提取出来可以用下面模板。
#导入库
from pyquery import PyQuery as pq
import requests
#请求网址
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
#实例化对象
doc=pq(res.text)
#筛选出a标签
lista=doc("a")
#把a标签的href属性一次迭代给a并输出
for a in lista.items():
print(a.text())
#最后这个代码也可以用这个形式
#print(a.html())
案例演示
这里爬取萧瑟迪博客左侧网站导航栏的各个名称案例演示
观察网站样式
本次目标是获取这些导航栏的内容还有对应的网址。
我们观察代码结构
发现这些代码都是在ul标签中的li标签中的a标签。
而在li标签中,都有navbar。
那么思路就是抓取源码,之后筛选id属性有navbar的标签,打印出他指向的网址和标签的内容即可
代码样式
#导入库
from pyquery import PyQuery as pq
import requests
#请求网址
res=requests.get("http://xiaodi8.com/")
res.encoding="utf-8"
#实例化对象
doc=pq(res.text)
#筛选出a标签
lista=doc("ul li[id*='navbar'] a")
#把a标签的href属性一次迭代给a并输出
for a in lista.items():
print(a.text(),end=" ")
print(a.attr("href"))
比较简单。