Python网络爬虫神器PyQuery的基本使用教程
什么是PyQuery
PyQuery是Python中的一个HTML解析库,它的API与jQuery类似,使得你可以使用jQuery的语法来操作和查找HTML文档,解析速度非常快,使用也非常简洁方便。如果你熟悉jQuery,那么上手学习PyQuery会非常简单。
安装PyQuery
在Python中,我们可以使用pip来安装PyQuery,命令如下:
pip install pyquery
使用PyQuery
我们先来看一个简单的例子,获取并打印出某个网页的标题:
from pyquery import PyQuery as pq
import requests
url = 'https://www.baidu.com'
html = requests.get(url).content.decode('UTF-8')
doc = pq(html)
title = doc('title').text()
print(title)
代码解析:
- 导入PyQuery库和requests库。
- 使用requests库请求某个网页,并获取网页的html内容。
- 使用PyQuery()方法将html内容转化为PyQuery对象。
- 使用PyQuery对象的语法选择文档中的title,并获取其文本内容。
- 打印出title。
PyQuery常用语法
选择元素
PyQuery中选择元素的语法与jQuery类似,支持多种选择器:
- 标签选择器
doc('p')
- 类选择器
doc('.class')
- id选择器
doc('#id')
- 属性选择器
doc('[attribute=value]')
更多选择器可以参考jQuery官方文档。
获取元素的属性和内容
doc.attr('attribute') # 获取元素的某个属性的值
doc.text() # 获取元素的文本内容
doc.html() # 获取元素的HTML代码
获取元素列表
doc('p') # 获取所有p元素
doc('p').eq(0) # 获取第一个p元素
doc('p').find('a') # 获取所有p元素下的a元素
doc('p').siblings('span') # 获取所有p元素的兄弟元素中的span元素
修改元素的内容和属性
doc('p').text('新的文本内容') # 修改p元素的文本内容
doc('a').attr('href', 'http://www.example.com') # 修改a元素的href属性
示例1 - 抓取猫眼电影Top100
我们可以用PyQuery来爬取猫眼电影Top100的信息,并将其存入MongoDB。
from pyquery import PyQuery as pq
import pymongo
import requests
# 初始化MongoDB连接
client = pymongo.MongoClient('mongodb://localhost:27017/')
# 数据库和集合名称
db_name = 'maoyan'
collection_name = 'top100'
# 请求信息
url = 'https://maoyan.com/board/4'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 请求网页信息
html = requests.get(url, headers=headers).content.decode('utf-8')
doc = pq(html)
# 获取电影列表
item_list = doc('.board-wrapper dd').items()
for item in item_list:
# 获取电影信息
title = item('.name').text()
star = item('.star').text()
release_time = item('.releasetime').text()
# 构造电影数据
movie = {
'title': title,
'star': star,
'release_time': release_time
}
# 将电影数据存入MongoDB
db = client[db_name]
collection = db[collection_name]
collection.insert(movie)
代码解析:
- 导入PyQuery、pymongo和requests库。
- 初始化MongoDB连接,指定数据库和集合名称。
- 请求猫眼电影Top100的网页信息,并使用PyQuery将html内容转化为PyQuery对象。
- 获取电影列表,遍历每个电影的元素。
- 解析电影信息,并构造电影数据。
- 将电影数据存入MongoDB中。
示例2 - 抓取Steam游戏信息
我们可以用PyQuery来爬取Steam游戏的信息,并将其存入MySQL数据库。
from pyquery import PyQuery as pq
import mysql.connector
import requests
# 初始化MySQL连接
database = mysql.connector.connect(
host='localhost',
user='root',
password='root',
database='steam'
)
# 请求信息
url = 'https://store.steampowered.com/search/?filter=topsellers&page={}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 请求游戏信息并存入MySQL
for page in range(1, 6):
print(f'-------正在爬取第{page}页-------')
html = requests.get(url.format(page), headers=headers).content.decode('utf-8')
doc = pq(html)
for item in doc('.search_result_row').items():
title = item('.search_name').text()
release_date = item('.search_released').text()
price = item('.search_price .game_purchase_price').text()
if price == '':
price = '免费'
cursor = database.cursor()
sql = "INSERT INTO game (title, release_date, price) VALUES (%s, %s, %s)"
val = (title, release_date, price)
cursor.execute(sql, val)
database.commit()
print(f'{title} - {release_date} - {price}')
代码解析:
- 导入PyQuery和mysql.connector库。
- 初始化MySQL连接。
- 请求Steam游戏信息,并遍历每个游戏的元素。
- 解析并构造游戏数据。
- 将游戏数据插入MySQL数据库中。
以上是两个使用PyQuery的示例,你可以根据自己的需要来选择进行爬取需要爬取的网站,并选择合适的方法进行爬取。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python网络爬虫神器PyQuery的基本使用教程 - Python技术站