7, pyquery의 데이터 가져 오기

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-

API 문서

초기화

들어오는 일반적으로 세 가지 방법의 초기화 : 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())

추천

출처www.cnblogs.com/g2thend/p/12452212.html