2018-06-24

網(wǎng)頁(yè)解析方法

1逗宁、BeautifulSoup

from bs4 import BeatifulSopu

soup=BeautifulSopu(html,'lxml')

獲取屬性的方法:

soup.p.attrs ? ?輸出全部屬性

soup.p.attrs['name']獲取指定屬實(shí)

soup.p['name']使用字典形式獲取

獲取文本的方法:

soup.p.string使用屬性

soup.p.get_text()使用方法

獲取直接子節(jié)點(diǎn)

soup.p.contents返回所有的子結(jié)點(diǎn)一個(gè)列表

soup.p.children返回子結(jié)點(diǎn)的一個(gè)生成器,使用使用迭待輸出

獲取子孫節(jié)點(diǎn)

soup.p.descendants返回子孫節(jié)點(diǎn)的一個(gè)生成器悲敷,包括子節(jié)點(diǎn)、子孫節(jié)點(diǎn)

返回父節(jié)點(diǎn)

soup.a.parent

soup.a.parents獲取所有父輩

獲取兄弟節(jié)點(diǎn)

soup.a.next_sibling

soup.a.previous_sibling

soup.a.next_siblings

soup.a.previous_siblings

元素查找

def find_all(self, name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs):與findAll是同一函數(shù)

此處的name為標(biāo)簽名嫂丙,如ul,li等也可以傳遞attrs參數(shù)

使用text參數(shù)匹配節(jié)點(diǎn)的文本顶伞,傳入字符串或者傳入正則表達(dá)式

soup.find_all(text=re.compile('link')))把包含link的文本結(jié)果輸出,類型為列表

其他方法

find()

find_parents()

find_parent()

find_next_sibling()

find_next_siblings()

find_previous_siblings()

find_previous_sibling()

find_all_next()

find_next()

find_all_previous()

find_previous()

另外BeautifulSopu中也提供了CSS選擇器

soup.select('ul ?li'))

2惠险、pyquery使用

from pyquery import PyQuery as pq

以下三種方式

doc=pq(html)

doc=pq(url)

doc=pq(文件名)

print(doc('#container ?.list li'))

獲取子節(jié)點(diǎn):

items=doc('.list')

items.find('li')使用find可以返回所有子孫節(jié)點(diǎn),如果只想返 回子節(jié)點(diǎn)抒线,則使用children()

items.children()此時(shí)可以指定需要篩選出的子節(jié)點(diǎn)班巩,增加參數(shù)即可,如

items.children('.activer')

獲取父節(jié)點(diǎn)

items=doc('.list')

items.parent()及items.parents()

如果要獲取指定的父節(jié)點(diǎn)可使用items.parents('.wrap')

獲取兄弟節(jié)點(diǎn)

items.siblings()獲取所有的氏兄弟節(jié)點(diǎn)

items.siblings('.active')獲取指定的兄弟節(jié)點(diǎn)

元素的輸出

1嘶炭、針對(duì)單個(gè)元素抱慌,可以直接打印輸入出,也可以轉(zhuǎn)為字符串

li=doc('.item1')

print(li)或print(str(li))

2眨猎、如果有多個(gè)節(jié)點(diǎn)則需要遍歷輸出

doc('li').items()返回一個(gè)生成器抑进,此處的items與上面代碼的items是不同的,此處是固定值睡陪,上面講的是隨便取的一個(gè)名字

獲取屬性

a=doc('.item')

以下2種方式獲取屬性

print(a.attr('href'))

print(a.attr.href)

,如果屬性是多個(gè)单匣,則需要遍歷 才能輸出

as=doc('li').items()

for a in as:

????print(a.attr('href')

獲取文件

a=doc('.item')

print(a.text())獲取內(nèi)部的文本信息

print(a.html())獲取節(jié)點(diǎn)內(nèi)的html文本

另外html()返回第一個(gè)節(jié)點(diǎn)的內(nèi)部html文本,而text()返回的是所以節(jié)點(diǎn)的純文本宝穗,返回中間使用空格分開(kāi)的字符串

其他方法

addClass() ?removeClass() ?remove()

屬性值修改

li=doc('.item')

li.attr('name','link')

li.text('changed')

li.html('<span> ahndagdaf</span>')

如果attr()方法中傳入一個(gè)參數(shù)的屬性名,則此時(shí)是獲取這個(gè)屬性值码秉,如果傳入2個(gè)參數(shù)逮矛,則是修改屬性值,如果text(),html()沒(méi)有傳入?yún)?shù)转砖,則是獲取 文本须鼎,如果傳入了參數(shù)鲸伴,則是進(jìn)行賦值。

http://www.w3school.com.cn/css/index.asp

支持偽類選擇器

doc=pq(html)

li=doc('li:first-child')

first-child ?last-child ? nth-child(2) ?gt(2) ? nth-child(2n) ?contains(second)


3晋控、lxml (xpath)

from lxml import etree

以下2種方式

html=etree.HTML(text)#已知字符串時(shí)使用

html=etree.parse('./test.html',etree.HTMLParser())#已知文件名時(shí)使用

獲取屬性值汞窗、文本值

此時(shí)就可以使用xpath進(jìn)行匹配了@取屬性 ?text()取文本

result=html.xpath('//li/a/@hre')

html.xpath('//li[@class='item']

html.xpath('//li[@class='item'/text()]

如果有多個(gè)屬性值時(shí),可以使用contains()函數(shù)

result=html.xpath('//li/a[contains(@class,“l(fā)i”)]/p/test()')

多屬性匹配可以使用and

result=html.xpath('//li[contains(@clall,'li') and @name='tang']/a/text()')

按序選擇

li[1]

li[last()]

li[position()<3]

li[last()-2]

http://www.w3school.com.cn/xpath/xpath_functions.asp

4赡译、selector解析

選擇器的使用可以分為下面的三步:

在scrapy中有2中方法調(diào)用selector

一種是from scrapy.selector import Selector

另一種是from scrapy import Selector

導(dǎo)入選擇器from scrapy.selector import Selector

創(chuàng)建選擇器實(shí)例selector = Selector(response=response)

使用選擇器selector.xpath()或者selector.css()

Scrapy selector是以?文字(text)?或?TextResponse?構(gòu)造的?Selector?實(shí)例仲吏。 其根據(jù)輸入的類型自動(dòng)選擇最優(yōu)的分析方法(XML vs HTML):

>>> from scrapy.selector import Selector

>>> from scrapy.http import HtmlResponse

以文字構(gòu)造:

>>> body='good'

>>> Selector(text=body).xpath('//span/text()').extract()[u'good']

以response構(gòu)造:

>>> response=HtmlResponse(url='http://example.com',body=body)

>>> Selector(response=response).xpath('//span/text()').extract()[u'good']

其他方法

xpath選擇器中還有一個(gè).re()方法,可以返回unicode字符串的列表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝌焚,一起剝皮案震驚了整個(gè)濱河市裹唆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌只洒,老刑警劉巖许帐,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異毕谴,居然都是意外死亡成畦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門涝开,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)循帐,“玉大人,你說(shuō)我怎么就攤上這事忠寻【逶。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵奕剃,是天一觀的道長(zhǎng)衷旅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)纵朋,這世上最難降的妖魔是什么柿顶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮操软,結(jié)果婚禮上嘁锯,老公的妹妹穿的比我還像新娘。我一直安慰自己聂薪,他們只是感情好家乘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著藏澳,像睡著了一般仁锯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翔悠,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天业崖,我揣著相機(jī)與錄音野芒,去河邊找鬼。 笑死双炕,一個(gè)胖子當(dāng)著我的面吹牛狞悲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妇斤,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼摇锋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了趟济?” 一聲冷哼從身側(cè)響起乱投,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顷编,沒(méi)想到半個(gè)月后戚炫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媳纬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年双肤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钮惠。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茅糜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出素挽,到底是詐尸還是另有隱情蔑赘,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布预明,位于F島的核電站缩赛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏撰糠。R本人自食惡果不足惜酥馍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阅酪。 院中可真熱鬧旨袒,春花似錦、人聲如沸术辐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辉词。三九已至尉辑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間较屿,已是汗流浹背隧魄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隘蝎,地道東北人购啄。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嘱么,于是被迫代替她去往敵國(guó)和親狮含。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容