其他
pyquery一些自定义的用法
昨天在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功能的扩展,我觉得实现方式很不错,很美观简洁,以后我会多模仿,比如用函数或类的方式,对已有的库及函数进行功能加持。
觉得赞就加瓶可乐喝