逆向爬虫05 pyquery模块

python pyquery模块

pyquery模块是继bs4模块和xpath模块之后,最接近前端CSS选择器和前端框架jQuery语法的一种用于提取html代码的python模块,熟悉前端代码的可以很快上手pyquery,不同于bs4和xpath,pyquery可以动态的往html代码块中增删改查标签,属性和文本,方便一些前端代码的特殊处理。

下面老规矩,依然和bs4和xpath模块一样,分别介绍如何查找:
① 标签 ② 属性 ③ 文本

然后再介绍如何对html代码块进行增删改查

一、查找标签

from pyquery import PyQuery

html = """
    <ul>
        <li class="aaa"><a href="http://www.google.com">谷歌</a></li>
        <li class="aaa"><a href="http://www.baidu.com">百度</a></li>
        <li class="bbb" id="qq"><a href="http://www.qq.com">腾讯</a></li>
        <li class="bbb"><a href="http://www.yuanlai.com">原来</a></li>
    </ul>
"""

# 加载html内容
p = PyQuery(html)

# 利用标签选择器查找标签
a = p("a")	# 找这段html代码中的所有a标签
print(a)	# <a href="http://www.google.com">谷歌</a><a href="http://www.baidu.com">百度</a><a href="http://www.qq.com">腾讯</a><a href="http://www.yuanlai.com">原来</a>

# 利用类选择器和后代选择器找标签,其中.aaa表示找class是aaa的标签,空格a表示找它的后代a标签
a = p(".aaa a")     # 找class属性是aaa的后代a标签
print(a)	# <a href="http://www.google.com">谷歌</a><a href="http://www.baidu.com">百度</a>

# 利用id选择器和后代选择器找标签,其中#qq表示找id是qq的标签,空格a表示找它的后代a标签
a = p("#qq a")		# 找id属性是qq的后代a标签
print(a)	# <a href="http://www.qq.com">腾讯</a>

二、查找属性和文本

from pyquery import PyQuery

html = """
    <ul>
        <li class="aaa"><a href="http://www.google.com">谷歌</a></li>
        <li class="aaa"><a href="http://www.baidu.com">百度</a></li>
        <li class="bbb" id="qq"><a href="http://www.qq.com">腾讯</a></li>
        <li class="bbb"><a href="http://www.yuanlai.com">原来</a></li>
    </ul>
"""

# 加载html内容
p = PyQuery(html)

# 在找到标签的基础上,就可以找属性和文本了
qq_href = p("#qq a").attr("href")	# 标签.attr("属性")查找属性
qq_text = p("#qq a").text()			# 标签.text()查找文本
print(qq_href)	# http://www.qq.com
print(qq_text)	# 腾讯

# 坑,如果多个标签同时拿属性,只能默认拿到第一个
href = p("li a").attr("href")
print(href)		# http://www.google.com

# 多个标签拿属性,文本,当匹配结果是多个标签时,返回的是生成器,需要通过for循环来取出里面的内容
it = p("li a").items()
for item in it:     # 从迭代器中拿到每一个标签
    href = item.attr("href")        # 拿到href属性
    text = item.text()
    print(text, href)	# 谷歌 http://www.google.com 百度 http://www.baidu.com 腾讯 http://www.qq.com 原来 http://www.yuanlai.com

三、对html代码进行增删改查

from pyquery import PyQuery

html = """
    <HTML>
        <div class="aaa">哒哒哒</div>
        <div class="bbb">嘟嘟嘟</div>
    </HTML>
"""

p = PyQuery(html)

# 在xxx标签后面添加xxx新标签
p("div.aaa").after("""<div class="ccc">吼吼吼</div>""")
print(p)	# <HTML><div class="aaa">哒哒哒</div><div class="ccc">吼吼吼</div><div class="bbb">嘟嘟嘟</div></HTML>

# 在xxx标签内部最后添加标签
p("div.aaa").append("""<span>我爱你</span>""")
print(p)	# <HTML><div class="aaa">哒哒哒<span>我爱你</span></div><div class="bbb">嘟嘟嘟</div></HTML>

# 修改属性
p("div.bbb").attr("class", "aaa")
print(p)	# <HTML><div class="aaa">哒哒哒</div><div class="aaa">嘟嘟嘟</div></HTML>

# 新增属性
p("div.bbb").attr("id", "12306")
print(p)	# <HTML><div class="aaa">哒哒哒</div><div class="bbb" id="12306">嘟嘟嘟</div></HTML>

# 删除属性
p("div.bbb").remove_attr("id")
print(p)	# <HTML><div class="aaa">哒哒哒</div><div class="bbb">嘟嘟嘟</div></HTML>

# 删除标签
p("div.bbb").remove()
print(p)	# <HTML><div class="aaa">哒哒哒</div></HTML>

方法总结

"""
下面除了第一个是返回的pyquery标签对象,其余的都是pyquery对象下的方法
    1. pyquery(选择器),用于查找标签
    2. items() 当选择器选的内容很多的时候,需要一个一个处理的时候
    3. attr(属性名) 获取属性信息
    4. text() 获取文本
    5. after(标签) 在某个标签后面添加标签
    6. append(标签) 在某个标签里面的尾部添加标签
    7. attr(属性名,值) 属性名有则修改,无则添加
    8. remove_attr(属性名) 删除属性
    9. remove() 删除标签
"""

未提到的知识点

"""
    xpath可以在/aaa/bbb[1]/ccc的方式来查找某个层节点下同属bbb节点的第一个
    pyquery通过"aaa > bbb:nth-child(1) >> ccc"的方式来完成类似功能

    xpath可以在/aaa/bbb[@class='jay']的方式来查找bbb中有class属性为jay的标签
    而pyquery通过"aaa > bbb:contains(购车经销商)"来查找bbb中文本有"购车经销商"的标签
"""

下集预告

"""
	总的来说pyquery相比于bs4和xpath来说更加强大,但是它使用起来也稍显复杂,可能需要结合前端jQuery知识一起食用。
	下一篇笔记考虑将三种模块的所有标签,属性,文本查找方式拿出来对比总结一下,方便在合适的情况下,使用合适的模块。
	尽可能将所有可能查找的情况都一一进行举例类比,筛选出每一种情况下最方便使用的模块方法。
"""
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium是一个自动化测试的工具,可以启动一个全新的浏览器,并从浏览器中提取到你想要的内容。为什么要学习Selenium呢?因为很多网站现在将数据进行加密,再通过JavaScript将数据解密,而Requests模块只能获取到加密后的数据,无法爬取这类网站的数据。而Selenium模块提供了浏览器环境,浏览器会加载JavaScript代码对数据进行解密,因此Selenium可以应对大多数数据加密的情况。 安装Selenium很简单,首先输入命令pip install selenium进行安装,然后下载浏览器驱动,可以在https://npm.taobao.org/mirrors/chromedriver找到并下载适合自己浏览器版本的驱动。下载完后将驱动放到Python解释器目录即可。 逆向爬虫是指使用Selenium来对网站进行爬取。通过Selenium可以模拟浏览器的行为,使得爬虫更加难以被检测到。逆向爬虫可以应对一些反爬虫的策略,例如验证码等。如果你想要使用Selenium进行逆向爬虫,可以按照以下步骤进行操作: 1. 打开浏览器,输入网址并回车,可以使用Selenium的webdriver模块来实现。 2. 使用Selenium的各种操作方法来提取你想要的内容,例如查找元素、点击按钮等。 3. 如果需要获取iframe中的内容,可以使用Selenium的switch_to.frame方法切换到对应的iframe,并提取内容。 4. 如果需要操作下拉列表,可以使用Selenium的select模块来选择选项,并获取页面代码。 5. 如果想要隐藏浏览器窗口,可以使用Selenium的options模块来设置无头模式。 对于验证码的处理,你可以使用超级鹰等第三方工具来解决,这些工具可以自动破解验证码。 请注意,这些步骤只是逆向爬虫的基础方法,具体的操作可能因网站而异,你可能需要根据具体情况进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [逆向爬虫11 selenium基础](https://blog.csdn.net/weixin_40743639/article/details/122631986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值