pyquery jQuery 라이브러리는 파이썬 구현 jQuery를 구문 분석 HTML 문서를 작동 할 수있다
참고 웹 사이트
https://www.jianshu.com/p/770c0cdef481
https://pythonhosted.org/pyquery/css.html
https://www.osgeo.cn/pyquery/index.html
개체 초기화
html = """
<html lang="en">
<head>
简单好用的
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="object-1">Python</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
</ul>
</body>
</html>
"""
##############字符串初始化
from pyquery import PyQuery as pq
#初始化为PyQuery对象
doc = pq(html)
print(type(doc))
print(doc)
####html 文件初始化
#filename参数为html文件路径
test_html = pq(filename = 'test.html')
print(type(test_html))
print(test_html)
####网址获取
response = pq(url = 'https://www.baidu.com')
print(type(response))
print(response)
CCS 일반적인 선택
용기 라벨 인쇄에 대한 아이디
print(doc('#container'))
print(type(doc('#container')))
객체 1의 레이블 클래스를 인쇄
print(doc('.object-1'))
인쇄 라벨 body 태그라고
print(doc('body'))
CSS 선택은 다양한 사용
print(doc('html #container'))
의사 클래스 선택기
print(pseudo_doc('li:nth-child(2)'))
#打印第一个li标签
print(pseudo_doc('li:first-child'))
#打印最后一个标签
print(pseudo_doc('li:last-child'))
포함
#找到含有Python的li标签
print(pseudo_doc("li:contains('Python')"))
#找到含有好的li标签
print(pseudo_doc("li:contains('好')"))
찾기 라벨
Pyquery는 조건에 따라 오브젝트 자격을 갖춘 라벨 찾기, BeautifulSoup로 방법은 비슷합니다 찾을 수 있습니다.
식 용기 라벨 인쇄
print(doc.find('#container'))
print(doc.find('li'))
- 아이들 서브 레이블 생성 방법
#id=container的标签的子辈标签
container = doc.find('#container')
print(container.children())
아버지는 -parent 방법을 라벨
object_2 = doc.find('.object-2')
print(object_2.parent())
형제 라벨 -siblings 방법
object_2 = doc.find('.object-2')
print(object_2.siblings())
정보를 라벨에 대한 접근
대상 레이블을 찾은 후, 우리는 텍스트 또는 내부 태그의 속성 값이 시간 작업의 텍스트 또는 속성 값을 추출 할 필요가 필요
태그 추출 속성치
.attr() 传入 标签的属性名,返回属性值
object_2 = doc.find('.object-2')
print(object_2.attr('class'))
태그 내의 텍스트
html_text = """
<html lang="en">
<head>
简单好用的
<title>PyQuery</title>
</head>
<body>
<ul id="container">
Hello World!
<li class="object-1">Python</li>
<li class="object-2">大法</li>
<li class="object-3">好</li>
</ul>
</body>
</html>
"""
docs = pq(html_text)
print(docs.text())
######
object_1 = docs.find('.object-1')
print(object_1.text())
container = docs.find('#container')
print(container.text())
tips:如果我只想获得Hello World这个,不想得到其他的文本,可以使用remove方法将li标签去掉,然后再使用text方法
container = docs.find('#container')
container.remove('li')
print(container.text())
일부 사용자 지정 사용을 pyquery
PyQuery과 BeautifulSoup로 대비, 우리는 PyQuery는 URL에 대한 요청을 개시 사실을 발견했습니다
from pyquery import PyQuery
PyQuery(url = 'https://www.baidu.com')
오프너 매개 변수
이것은 바이의 URL 요청 PyQuery이고, 상기 처리 요구에 응답하여 반환 된 데이터는 PyQuery 개체이다. 당신은 셀레늄이나 요청 라이브러리를 사용하려면 일반 pyquery 라이브러리 호출 URLLIB 기본 라이브러리는, 당신은 PyQuery에게 선제골을 정의 된 매개 변수를 사용자 정의 할 수 있습니다.
오프너 매개 변수는 요청을 시작하는 URL 요청에 도서관의 역할이 무엇인지 pyquery을 알려줍니다. URLLIB, 요청, 셀레늄 등의 일반적인 요청 라이브러리입니다. 여기서 우리는 셀레늄의 오프너를 사용자 정의 할 수 있습니다.
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)
쿠키, 헤더
브라우저로 액세스 더 실제 URL, 모방을 위해 일반적으로 요청 사용량,합니다. 일반적으로, 우리는 또한 매개 변수의 쿠키를 전달해야 할 필요가 헤더를 통과해야합니다. 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)
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))
데이터를 얻을 수 PyQuery-
초기화
들어오는 일반적으로 세 가지 방법의 초기화 : URL을 전달받는 문자열, 파일 수신
초기화 문자열
html = '''
<div>
<ul>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc)
print(type(doc))
print(doc('li'))
# 代码中的doc其实就是一个pyquery对象,我们可以通过doc可以进行元素的选择,其实这里就是一个css选择器,所以CSS选择器的规则都可以用,直接doc(标签名)就可以获取所有的该标签的内容,如果想要获取class 则doc('.class_name'),如果是id则doc('#id_name')....
URL 초기화
from pyquery import PyQuery as pq
doc = pq(url="http://www.baidu.com",encoding='utf-8')
print(doc('head'))
초기화 파일
PQ (파일명 = 'index.html을')
기본 CSS 셀렉터
html = '''
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))
# doc('#container .list li'),这里的三者之间的并不是必须要挨着,只要是层级关系就可以
방법은 일반적으로 CSS 선택기를 사용 :
.class .color 选择class="color"的所有元素
#id .info 选择id="info"的所有元素
* * 选择所有元素
element p 选择所有的p元素
element,element div,p 选择所有的div元素和所有的p元素
element element div p 选择div标签内部所有的p元素
[attribute] [target] 选择带有target属性的元素
[attribute=value] [target=_blank] 选择target=_blank的所有元素
찾기 요소
하위 요소
아이들은 찾을 수
html = '''
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)
# 通过pyquery找到结果其实还是一个pyquery对象,可以继续查找,上述中的代码中的items.find('li') 则表示查找ul里的所有的li标签
어린이가 동일한 효과를 달성하고, 상기 방법에 의해 얻어진 결과는 또한 수 pyquery는 .children 개체
li = items.children()
print(type(li))
print(li)
# 同时在children里也可以用CSS选择器
li2 = items.children('.active') print(li2)
부모 요소
부모, 부모 방법
.parent해서 당신은 부모 요소의 콘텐츠를 찾을 수 있습니다
html = '''
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)
.parents으로 찾을 수있는 조상 노드
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)
콘텐츠 필터링을 찾을 때 마찬가지로, 우리는 또한 .parents하여 CSS 선택기를 추가 할 수 있습니다
형제 자매
형제 자매
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())
닥 .tem -0- 코드 .active는은 ( '. 목록 .item-0.active ') 다음에, 그리고 관계가 표현하므로, 이러한 조건은 왼쪽에 만족된다 : 항목의 thired 라벨 것을
당신이 .siblings 모든 형제 레이블을 얻을 수 있도록, 물론, 여기에 포함되지 않은 자신
같은 깡통도에서) (CSS 셀렉터 .siblings에 의해 상영
순회
개별 요소
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
lis = doc('li').items()
print(type(lis))
for li in lis:
print(type(li))
print(li)
##通过items()可以得到一个生成器,并且我们通过for循环得到的每个元素依然是一个pyquery对象
정보에 대한 액세스
취득 부동산
pyquery이 .attr 객체 (속성 이름)
pyquery이 .attr 객체. 속성 이름
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))
print(a.attr.href)
#获得属性值的时候可以直接a.attr(属性名)或者a.attr.属性名
텍스트를 가져옵니다
많은 경우에 우리는 텍스트 정보는 .text로, html 태그를 포함 얻을 필요가 () 당신은 문자 메시지를 얻을 수 있습니다
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())
가져 오기 HTML
우리 .html로에 포함 된 현재의 HTML 태그에 대한 정보를 얻을 수있다 () 방법,
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())
DOM 조작?
addClass는 removeClass
프론트 엔드의 작동에 대해 잘 알고, 당신은 추가하고이 두 작업의 삭제 속성 수
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)
ATTR, CSS
우리는 추가하고, 레이블에 인 attr 속성을 수정할 수 있습니다 같은
그 이전의 속성이 변경이있는 경우, 추가하지 않을 경우
, 우리는 또한 라벨의 속성은 스타일 속성에 더있을 것입니다, CSS를 통해이 시간을 일부 CSS 속성을 추가 할 수 있습니다
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.css('font-size', '14px')
print(li)
없애다
우리는 약간의 병렬 다른 라벨에 방해가 될 수있는 문자 메시지를받을 때 때때로,이 시간에 당신은 작동 너무 쉽게, 불필요한 간섭이나 삭제 라벨을 제거 할 수 있습니다
html = '''
<div class="wrap">
Hello, World
<p>This is a paragraph.</p>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())
wrap.find('p').remove()
print(wrap.text())