Python 网络爬虫精解之 PyQuery 的使用说明
1. PyQuery 简介
PyQuery 是 Python 网络爬虫中常用的 HTML/XML 解析库之一。它是基于 jQuery 核心思想的 Python 实现,使用方式与 jQuery 类似,支持静态解析和动态解析。
PyQuery 让选取特定元素变得轻松,提供简单易用的 API,用于解析HTML、XML文档。PyQuery 库中包装了 lxml 库,使得 XPath 可以被解析。
2. PyQuery 的安装和使用
2.1 安装 PyQuery
在Linux/Unix、Windows上都可以使用 pip 进行安装,命令如下:
pip install pyquery
或者使用 conda 安装:
conda install pyquery
2.2 使用 PyQuery
2.2.1 Pyquery 的基本用法
使用 PyQuery 前需要导入库:
from pyquery import PyQuery as pq
Pyquery 常与 requests 配合使用:
import requests
from pyquery import PyQuery as pq
html = requests.get('https://cuiqingcai.com').text
doc = pq(html)
print(doc('title'))
2.2.2 Pyquery 的选择器
常见的选择器有:
- 标签选择器
doc('p') #选取所有p标签
- 类选择器
doc('.item') #选取 class="item" 的所有标签
- ID 选择器
doc('#container') #选取id="container" 的标签
- 属性选择器
doc('[href]') #选取有 href 属性的标签
doc('[name="keywords"]') #选取 name="keywords" 的标签
- 后代选择器
doc('ul li') #选取 ul 标签下的所有 li 标签
- 子元素选择器
doc('ul > li') #选取 ul 标签下的儿子 li 标签
2.2.3 Pyquery 的属性、文本、HTML 方法
使用 Pyquery 获取元素的属性、文本和HTML:
import requests
from pyquery import PyQuery as pq
html = requests.get('https://cuiqingcai.com').text
doc = pq(html)
a = doc('.nav').find('a')
print(a.attr('href'))
print(a.text())
print(a.html())
2.2.4 其他常用的 PyQuery 方法
- find 方法:查找子元素
doc('.wrap').find('li') #找到 class="wrap" 的标签下的 li 标签
- parent 方法:查找父元素
doc('.wrap li').parent() #找到 li 的父元素
- next 方法:查找下一个兄弟元素
doc('.wrap li:first-child').next() #找到 class="wrap" 的标签下第一个 li 标签的下一个兄弟元素
- siblings 方法:查找所有兄弟元素
doc('.wrap li:first-child').siblings() #找到 class="wrap" 的标签下第一个 li 标签的所有兄弟元素
3. PyQuery 示例
3.1 获取百度首页 Logo 的链接
import requests
from pyquery import PyQuery as pq
url = 'https://www.baidu.com'
html = requests.get(url).text
doc = pq(html)
logo = doc('#logo').find('a').attr('href')
print('百度首页Logo链接:', logo)
输出结果:
百度首页Logo链接: //www.baidu.com/
3.2 获取豆瓣电影Top250
import requests
from pyquery import PyQuery as pq
base_url = 'https://movie.douban.com/top250?start='
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
}
def get_movies(start):
url = base_url + str(start)
html = requests.get(url, headers=headers).text
doc = pq(html)
movie_list = doc('.grid_view li').items()
for movie in movie_list:
yield {
'电影名称': movie('.title').text(),
'电影评分': movie('.rating_num').text(),
'评价人数': movie('.star span:last-child').text(),
'引言': movie('.inq').text(),
'电影链接': movie('.hd a').attr('href')
}
for start in range(0, 250, 25):
for item in get_movies(start):
print(item)
输出结果:
{'电影名称': '肖申克的救赎', '电影评分': '9.7', '评价人数': '2149395人评价', '引言': '希望让人自由。', '电影链接': 'https://movie.douban.com/subject/1292052/'}
{'电影名称': '霸王别姬', '电影评分': '9.6', '评价人数': '1584587人评价', '引言': '风华绝代。', '电影链接': 'https://movie.douban.com/subject/1291546/'}
{'电影名称': '阿甘正传', '电影评分': '9.5', '评价人数': '1746269人评价', '引言': '一部美国近现代史。', '电影链接': 'https://movie.douban.com/subject/1292720/'}
...
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python网络爬虫精解之pyquery的使用说明 - Python技术站