分享

pyquery一些自定义的用法

 大邓的Python 2021-02-23

昨天在YouTube上看到PyQuery一些自定义的用法的视频,觉得很不错,就整理一下作为本期的内容。

访问网址

PyQuery与BeautifulSoup对比,我们会发现PyQuery可以对网址发起请求。 比如

from pyquery import PyQuery PyQuery(url = 'https://www.baidu.com')

opener参数

这是PyQuery对百度网址进行请求,并将请求返回的响应数据处理为PyQuery对象。一般pyquery库会默认调用urllib库,如果想使用selenium或者requests库,可以自定义PyQuery的opener参数。

opener参数作用是告诉pyquery用什么请求库对网址发起请求。常见的请求库如urllib、requests、selenium。这里我们自定义一个selenium的opener。

from pyquery import PyQuery
from selenium.webdriver import PhantomJS

#用selenium访问url
def selenium_opener(url):    #我没有将Phantomjs放到环境变量,所以每次用都要放上路径    driver = PhantomJS(executable_path = 'phantomjs的路径')    driver.get(url)    html = driver.page_source    driver.quit()    return html

#注意,使用时opener参数是函数名,没有括号的!
PyQuery(url='https://www.baidu.com/', opener=selenium_opener)

这时候我们就能对PyQuery对象进行操作,提取有用的信息。具体请看上次的分享,如果想了解更多的功能,pyquery文档写的不怎么详细,好在基本跟jQuery功能吻合,我们如果想用好pyquery,需要查看jQuery文档。

cookies、headers

在requests用法中,一般为了访问网址更加真实,模仿成浏览器。一般我们需要传入headers,必要的时候还需要传入cookies参数。而pyquery库就有这功能,也能伪装浏览器。

from pyquery import PyQuery cookies = {'Cookie':'你的cookie'}
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}


PyQuery(url='https://www.baidu.com/',headers=headers,cookies=cookies)

让你的selenium带上pyquery功能

如何让driver访问的网址得到的网页直接变为PyQuery对象,更方便提取数据?

from pyquery import PyQuery
from selenium.webdriver import PhantomJS

class Browser(PhantomJS):    @property    
   def dom(self):        return PyQuery(self.page_source)""" 这部分property是装饰器,需要知道@property下面紧跟的函数,实现了类的属性功能。
这里browser.dom,就是browser的dom属性。 """

browser = Browser(executable_path='phantomjs的路径')
browser.get(url='https://www.baidu.com/')
print(type(browser.dom))

返回

<class 'pyquery.pyquery.PyQuery'>

这几个对pyquery功能的扩展,我觉得实现方式很不错,很美观简洁,以后我会多模仿,比如用函数或类的方式,对已有的库及函数进行功能加持。

觉得赞就加瓶可乐喝

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多