爬蟲解析相關

re模塊

經常使用正則表達式符號html

'.'     默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
'^'     匹配字符開頭,若指定flags MULTILINE,這種也能夠匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'     匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也能夠
'*'     匹配*號前的字符0次或屢次,re.findall("ab*","cabb3abcbbac")  結果爲['abb', 'ab', 'a']
'+'     匹配前一個字符1次或屢次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']
'?'     匹配前一個字符1次或0次
'{m}'   匹配前一個字符m次
'{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb']
'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果'ABC'
'(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c
 
 
'\A'    只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z'    匹配字符結尾,同$
'\d'    匹配數字0-9
'\D'    匹配非數字
'\w'    匹配[A-Za-z0-9]
'\W'    匹配非[A-Za-z0-9]
's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t'

經常使用匹配語法正則表達式

re.match 從頭開始匹配
re.search 匹配包含
re.findall 把全部匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符當作列表分隔符
re.sub      匹配字符並替換

經常使用匹配模式ide

re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
M(MULTILINE): 多行模式,改變'^''$'的行爲(參見上圖)
S(DOTALL): 點任意匹配模式,改變'.'的行爲

BeautifulSoup

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div class="tang">
        <h3 id="libai">李白</h3>
        <p>有耳莫洗潁川水,有口莫食首陽蕨。</p>
        <p>含光混世貴無名,何用孤高比雲月?</p>
        <p>吾觀自古賢達人,功成不退皆殞身。</p>
        <p>子胥既棄吳江上,屈原終投湘水濱。</p>
        <p>陸機雄才豈自保?李斯稅駕苦不早。</p>
        <p>華亭鶴唳詎可聞?上蔡蒼鷹何足道?</p>
        <p>君不見吳中張翰稱達生,秋風忽憶江東行。</p>
        <p>且樂生前一杯酒,何必身後千載名?</p>
    </div>
<div>Alex</div>
    <a class="alex" href="$$$$$">連接1</a>
    <a id="wu" href="$$$$$">連接2</a>
    <a class="alex" href="$$$$$">連接3</a>
</body>
</html>
bs4_test.html
from bs4 import BeautifulSoup as bs

soup = bs(open('bs4_test.html',encoding='utf-8'),'lxml')
print(soup.h3)

#獲取屬性
print(soup.h3.attrs)
print(soup.a.attrs['href'])
print(soup.a['href'])

#獲取內容
print(soup.a.text)
print(soup.a.string)
print(soup.a.get_text())
print(soup.h3.text)
print(soup.h3.string)
print(soup.h3.get_text())
print('--------------------')
print(soup.text)
print('--------------------')
print(soup.string)
print('--------------------')

# find
print(soup.find('a',class_='alex'))
print('####################')

#findall
print(soup.find_all('a'))
print(soup.find_all('a',limit=2))
print(soup.find_all('a',class_='alex'))
print(soup.find_all(['a','h3']))
print('??????????????????')
print(soup.select('.alex'))
print(soup.select('.alex')[1].text)
print(soup.select('a'))
print(soup.select('#wu'))
print(soup.select('#wu')[0].text)
print('@@@@@@@@@@@@@@@@@@@@@@@')

# 層級選擇器
print(soup.select('.tang h3'))
# 包含選擇器
print(soup.select('.tang > h3'))
bs4基本用法
<h3 id="libai">李白</h3>
{'id': 'libai'}
$$$$$
$$$$$
連接1
連接1
連接1
李白
李白
李白
--------------------



Title



李白
有耳莫洗潁川水,有口莫食首陽蕨。
含光混世貴無名,何用孤高比雲月?
吾觀自古賢達人,功成不退皆殞身。
子胥既棄吳江上,屈原終投湘水濱。
陸機雄才豈自保?李斯稅駕苦不早。
華亭鶴唳詎可聞?上蔡蒼鷹何足道?
君不見吳中張翰稱達生,秋風忽憶江東行。
且樂生前一杯酒,何必身後千載名?

Alex
連接1
連接2
連接3


--------------------
None
--------------------
<a class="alex" href="$$$$$">連接1</a>
####################
[<a class="alex" href="$$$$$">連接1</a>, <a href="$$$$$" id="wu">連接2</a>, <a class="alex" href="$$$$$">連接3</a>]
[<a class="alex" href="$$$$$">連接1</a>, <a href="$$$$$" id="wu">連接2</a>]
[<a class="alex" href="$$$$$">連接1</a>, <a class="alex" href="$$$$$">連接3</a>]
[<h3 id="libai">李白</h3>, <a class="alex" href="$$$$$">連接1</a>, <a href="$$$$$" id="wu">連接2</a>, <a class="alex" href="$$$$$">連接3</a>]
??????????????????
[<a class="alex" href="$$$$$">連接1</a>, <a class="alex" href="$$$$$">連接3</a>]
連接3
[<a class="alex" href="$$$$$">連接1</a>, <a href="$$$$$" id="wu">連接2</a>, <a class="alex" href="$$$$$">連接3</a>]
[<a href="$$$$$" id="wu">連接2</a>]
連接2
@@@@@@@@@@@@@@@@@@@@@@@
[<h3 id="libai">李白</h3>]
[<h3 id="libai">李白</h3>]
輸出結果

lxml

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <title></title>
    </head>
    <body>
        <div class="tang">
            <h3 id="Li">李白</h3>
            <p>雲想衣裳花想容,春風拂檻露華濃。</p>
            <p>若非羣玉山頭見,會向瑤臺月下逢。</p>
            <p>獨坐敬亭山</p>
            <p>合沓牽數峯,奔地鎮平楚。</p>
            <p>中間最高頂,髣髴接天語。</p>
        </div>
        
        <div class="qingZhao">
            <a class="敬亭山" href="#"><h3>[唐] 李白</h3></a>
            <span>李清照(1084年3月13日—約1155年),號易安居士,漢族,齊州濟南(今山東省濟南市章丘區)人。宋代女詞人,婉約詞派表明,有「千古第一才女」之稱。
            李清照出生於書香門第,早期生活優裕,其父李格非藏書甚富,她小時候就在良好的家庭環境中打下文學基礎。出嫁後與夫趙明誠共同致力於書畫金石的蒐集整理。
            金兵入據中原時,流寓南方,境遇孤苦。所做詞,前期多寫其清閒生活,後期多悲嘆身世,情調感傷。形式上善用白描手法,自闢途徑,語言清麗。論詞強調協律,
            崇尚典雅,提出詞「別是一家」之說,反對以做詩文之法做詞。能詩,留存很少,部分篇章感時詠史,情辭慷慨,與其詞風不一樣。
            有《易安居士文集》《易安詞》,已散佚。後人有《漱玉詞》輯本。今有《李清照集校注》。</span>
            
            <p>醉花陰·薄霧濃雲愁永晝</p>
            <a class="zuihuayin">[宋] 李清照</a>
            <p>薄霧濃雲愁永晝。瑞腦消金獸。佳節又重陽,玉枕紗廚,半夜涼初透。東籬把灑黃昏後,有暗香盈袖。莫道不消魂,簾卷西風,人似黃花瘦。</p>
        </div>
        
        <div class="lizhi">
            <a class="zuihuayin">[宋] 李清照</a>
            <p>你的對手在看書</p>
            <p>你的敵人在磨刀</p>
            <p>你的閨蜜在減肥</p>
            <p>隔壁老王在練腰</p>
        </div>
    </body>
</html>
new_file.html
from lxml import etree

tree = etree.parse('new_file.html')
print(tree)
ret = tree.xpath('//div[@class="tang"]/p/text()')
print(ret)
print(ret[0])
ret = tree.xpath('//p')
print(ret)
ret = tree.xpath('//div[@class="qingZhao"]/span/text()')
print(ret)
ret = tree.xpath('//h3//text()')
print(ret)
ret = tree.xpath('//div[@class="qingZhao"]//@href')
print(ret[0])
xpath基本使用
<lxml.etree._ElementTree object at 0x0000022CDA5DB788>
['雲想衣裳花想容,春風拂檻露華濃。', '若非羣玉山頭見,會向瑤臺月下逢。', '獨坐敬亭山', '合沓牽數峯,奔地鎮平楚。', '中間最高頂,髣髴接天語。']
雲想衣裳花想容,春風拂檻露華濃。
[<Element p at 0x22cda5db7c8>, <Element p at 0x22cda5db808>, <Element p at 0x22cda5db848>, <Element p at 0x22cda5db888>, <Element p at 0x22cda5db8c8>, <Element p at 0x22cda5db948>, <Element p at 0x22cda5db988>, <Element p at 0x22cda5db9c8>, <Element p at 0x22cda5dba08>, <Element p at 0x22cda5db748>, <Element p at 0x22cda5dba48>]
['李清照(1084年3月13日—約1155年),號易安居士,漢族,齊州濟南(今山東省濟南市章丘區)人。宋代女詞人,婉約詞派表明,有「千古第一才女」之稱。\n\t\t\t李清照出生於書香門第,早期生活優裕,其父李格非藏書甚富,她小時候就在良好的家庭環境中打下文學基礎。出嫁後與夫趙明誠共同致力於書畫金石的蒐集整理。\n\t\t\t金兵入據中原時,流寓南方,境遇孤苦。所做詞,前期多寫其清閒生活,後期多悲嘆身世,情調感傷。形式上善用白描手法,自闢途徑,語言清麗。論詞強調協律,\n\t\t\t崇尚典雅,提出詞「別是一家」之說,反對以做詩文之法做詞。能詩,留存很少,部分篇章感時詠史,情辭慷慨,與其詞風不一樣。\n\t\t\t有《易安居士文集》《易安詞》,已散佚。後人有《漱玉詞》輯本。今有《李清照集校注》。']
['李白', '[唐] 李白']
#
輸出結果
相關文章
相關標籤/搜索