Python爬蟲之PyQuery的用法

2021-09-09 07:55:29 字數 4049 閱讀 5613

python教程全解

1、安裝 pip install pyquery

2、官方文件: 

3、初始化

(1)直接字串 (pq 引數可以直接傳入 html **,doc 現在就相當於 jquery 裡面的 $ 符號了)

from pyquery import pyquery as pq

doc = pq("")

(2)lxml.etree (可以首先用 lxml 的 etree 處理一下**,這樣如果你的 html **出現一些不完整或者疏漏,都會自動轉化為完整清晰結構的 html**)

from lxml import etree

doc = pq(etree.fromstring(""))

(3)直接傳url (這裡就像直接請求了乙個網頁一樣,類似用 urllib2 來直接請求這個鏈結,得到 html **)

from pyquery import pyquery as pq

doc = pq('')

(4)傳檔案

from pyquery import pyquery as pq

doc = pq(filename='hello.html')

4、提取內容

提取標籤內容,用.text()

提取標籤屬性值,用.attr() (提取a標籤的鏈結.attr('href'))

提取子孫節點內容用.text(),如果只提取子節點.html(),可能提取出來的是子節點的整個標籤

5、遍歷用到 items 方法返回物件列表,或者用 lambda

from pyquery import pyquery as pq

doc = pq(filename='hello.html')

lis = doc('li')

for li in lis.items():

print li.html()

print lis.each(lambda e: e)

使用

from pyquery import pyquery as pq

a = '''

head

段落1段落2'''

doc = pq(a)

# 提取標籤內容

doc('h').text() # 'head'

doc('h').html() # 'head'

doc('body').html() # '\n head

\n 段落1

\n 段落2

\n'doc('p').text() # '段落1 段落2'

doc('p').text().split(' ') # ['段落1', '段落2']

doc('p:nth-of-type(1)').text() # '段落1'

doc('body').text() # 'head 段落1 段落2'

# 提取標籤屬性

doc('h a').attr('href') # 'www.biaoti.com'

6、識別標籤

只根據標籤來識別

a = '''

'''doc = pq(a)

doc('h1').text() # 'head'

doc('h1, h2').text() # 表示「或」用逗號 'head 標題2 標題3'

同時根據標籤和屬性識別

a = '''

標題段落1

段落2段落3

段落4'''

doc = pq(a)

doc('p#p1').text() # '段落1'

doc('p.p3[id]').text() # 含有id屬性

doc('p.p3#pp').text() # 使用多個屬性篩選

doc('p[class=p3][id=pp]').text()

doc('p[class=p3], p[id=p1]').text() # 或的關係

doc('p[class=p3],[id=p1]').text() # 或者只用,隔開

doc('*#p1').text() # 不指定標籤名

# 否定

doc('p:not([id])').text() # 不含有id屬性

doc('body :not(p)').text() # 選出不是p的子節點 '標題'

doc('p:not(.p3)').text() # 選出class不是p3的

doc('p[id][id!=p2]').text() # 也可以用!=,這裡選擇有id且id不是p2的

# 類似正規表示式

doc('p[id^=p]').text() # 首端匹配

doc('p[id$=p]').text() # 尾端匹配

doc('p[id*=p]').text() # 包含

根據標籤內內容來識別

a = '''

段落1段落2

文章'''

doc = pq(a)

# :contains查詢內容中包含某字串的標籤

doc('p:contains(段落1)').text() # '段落1'

doc('p:contains(段落)').text() # '段落1 段落2'

doc('p:contains("1")').text()

根據位置識別

a = '''標題

文字1文字2'''

doc = pq(a)

doc('ul:nth-of-type(2) li').text() # 選擇第二個ul下的所有li

doc('ul li:nth-of-type(2)').text() # 選擇每個ul中第二個li

doc('ul li:even').text() # :even取偶數 :odd取奇數(這裡索引第乙個是0)

doc('ul li:first').text() # :first取第乙個 :last取最後乙個

doc('ul li:eq(0)').text() # 還有 lt gt 索引從0開始

與requests 使用

from pyquery import pyquery as pq

import requests

session = requests.session()

data = session.get("url")

jqdata = jq(data.text)

網頁請求

pyquery 本身還有網頁請求功能,而且會把請求下來的網頁**轉為 pyquery 物件

from pyquery import pyquery as pq

print pq('', headers=)

print pq('', , method='post', verify=true)

print(p.attr("id"))   #讀取屬性值

print(p.attr("id", "plop"))   #設定屬性值

print(p.attr("id", "hello"))  #設定屬性值

print(p.addclass('beauty'))  #新增class

print(p.removeclass('hello'))  #去除class

print(p.css('font-size', '16px'))  #設定css值

print(p.css())  #通過列表設定css

pyquery 同樣支援 ajax 操作,帶有 get 和 post 方法,不過不常用,一般我們不會用 pyquery 來做網路請求,僅僅是用來解析。

Python爬蟲之爬蟲概述

知識點 模擬瀏覽器,傳送請求,獲取響應 網路爬蟲 又被稱為網頁蜘蛛,網路機械人 就是模擬客戶端 主要指瀏覽器 傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。知識點 了解 爬蟲的概念 爬蟲在網際網路世界中有很多的作用,比如 資料採集 抓取招聘 的招聘資訊 資料分析 挖掘...

python爬蟲感悟 Python之爬蟲有感(一)

urllib.request.request url headers headers user agent 是爬蟲和反爬蟲鬥爭的第一步,傳送請求必須帶user agent 使用流程 1 建立請求物件 request urlllib.request.request url 2 傳送請求獲取響應物件 r...

python爬蟲header 爬蟲之header

有些 不會同意程式直接用上面的方式進行訪問,如果識別有問題,那麼站點根本不會響應,所以為了完全模擬瀏覽器的工作,我們需要設定一些headers 的屬性。首先,開啟我們的瀏覽器,除錯瀏覽器f12,我用的是chrome,開啟網路監聽,示意如下,比如知乎,點登入之後,我們會發現登陸之後介面都變化了,出現乙...