python中pyquery库的css选择器实战解析

1.pyquery部分选择器解释

"""pyquery的CSS选择器方法"""
from pyquery import PyQuery


html = """
职位名称 职位类别 人数 地点 发布时间
""" # 传递html内容初始化 res = PyQuery(html) # CSS选择器方法进行选择。#container为ID选择方法,.tablelist为class选择方法,tr为标签选择方法 # 这句的意思是选择ID为container节点内部的class为tablelist的节点中所有tr标签内容 print(res("#container .tablelist tr")) # 类型为PyQuery类型 print(type(res("#container .tablelist tr"))) """ # 常用CSS选择器方法介绍 find() 查找结点的所有子孙节点 children() 查找子节点,也可以在括号中添加想要查找的子节点类型 parent() 获取目标的父节点 parents() 获取所有的祖先节点,可以在括号中添加css选择器选取想要的祖先节点 siblings() 兄弟节点,选择除本身之外的兄弟节点,可添加css选择器 # 选择完成之后会有许多节点,这需要遍历 items() 返回一个生成器,使用for循环就可以打印出来。循环的每一个节点还是PyQuery类型可以继续CSS选择器选择 # 获取属性和文本信息 attr() 获取找到的第一个属性,找多个需要循环遍历 text() 获取所有文本以空格分割开并合并成一个字符串 html() 获取找到的第一个html文本,找多个需要循环遍历 # 节点操作 addClass() 增加class属性 removeClass() 移除class属性 remove() 删除find("xx").remove()找到的指定内容 attr() 增加节点属性 text() 增加节点文本内容 html() 增加节点html内容 http://www.w3school.com.cn/css/index.asp # CSS教程 """ # 伪类选择器 doc = PyQuery(html) # 第一个td节点 td = doc("td:first-child") print(td) # 最后一个td节点 td = doc("td:last-child") print(td) # 第二个td节点 td = doc("td:nth-child(2)") print(td) # 第三个td节点之后的td节点 td = doc("td:gt(2)") print(td) # 偶数位置的td节点 td = doc("td:nth-child(2n)") print(td) # 包含、地点、文本的td节点 td = doc("td:contains(地点)") print(td)
View Code

2.pyquery三种解析方法的选择

"""CSS选择器库,熟悉web和jquery可以选择此解析库"""
from pyquery import PyQuery
import requests


# 第一种解析方法,直接传入url进行请求然后用得到的HTML内容进行初始化
res = PyQuery(url="https://www.sogou.com/")
# css中的标签选择方法打印title标签和内容
print(res("title"))


# 第二种常规解析方法,用网页的源代码以字符串的形式传递给PyQuery类来初始化
rew = PyQuery(requests.get("https://www.sogou.com/").text)
print(rew("title"))


# 文件解析.可以选取一个本地HTML文件进行解析
req = PyQuery(filename="index.html")
print(req("title"))
View Code

3.pyquery实战解析之存储到txt文件

"""pyquery实战解析之数据存储"""
import requests
from pyquery import PyQuery


# 获取url
url = "https://www.gushiwen.org/default_1.aspx"
# 获取请求头信息
headers={
      "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36"}
# 发送get请求并获取请求的文本字符串
html = requests.get(url=url, headers=headers).text
# 将获取的文本字符串转换为PyQuery对象
pq = PyQuery(html)
# 使用css选择器并调用items()方法生成迭代器
items = pq(".cont").items()
# 循环遍历
for item in items:
    # 调用find()方法并采用css选择器中的标签选择获取标题。
    title = item.find("p b").text()
    # 获取结果类型为字符串,可以调用split()方法进行分割。分割之后为列表类型
    contents = item.find("p a").text().split(" ")
    # 根据获得的结果进行判断
    if len(contents) == 1:
        continue
    # 朝代
    dynasty = contents[1]
    # 作者
    author = contents[2]
    # 调用children()方法并采用css选择器中的标签选择获取文本内容
    text = item.children(".contson").text()
    # f = open("poetry.txt", "a", encoding="utf-8")
    # f.write("\n".join([title, dynasty, author, text]))
    # f.write("\n" + "=" * 100 + "\n")
    # f.close()     # 此种文件操作模式完成之后需要调用close()方法主动关闭文件
    # 打开.txt文件,以"a"追加的方式写入utf-8编码的数据内容并给出可操作的文件句柄f
    with open("poetry.txt", "a", encoding="utf-8") as f:
        # with as 语法执行文件操作之后会自动关闭打开的文件,所以不用调用close()方法
        f.write("\n".join([title, dynasty, author, text]))
        f.write("\n" + "=" * 100 + "\n")
View Code

 

转载于:https://www.cnblogs.com/Guishuzhe/p/10247399.html

你可能感兴趣的:(python,javascript)