2017年5月25日 星期四

Python邊學邊記錄-Crawler網路爬蟲-第四課-正規表示式

Python Crawler Regular Expression

套件:import re

如何爬出網頁上h1~h6的tag資料
最原始的作法,就是把h1~h6弄到list內

這兩句好像放著比較感覺!
    resp = requests.get('目標網址')
    soup = BeautifulSoup(resp.text, 'html.parser')

接著,我們要取得所有h1~h6的tag資料:
hs = soup.find_all(['h1','h2','h3','h4','h5','h6'])
for h in hs:
  print(t.text.strip())

透過正則式來處理:
for h in soup.find_all(re.compile('h[1-6]')):
  print(h.text.strip())

取得png結尾的圖片:
imgs = soup.find_all('img')
  for img in imgs:
    if 'src' in img.attrs: # 確認有src屬性的存在
      if img['src'].endswitch('.png'): #endswitch表示字串結尾
        print(img['src'])

透過正則式來處理:
for img in soup.find_all('img',{'src': re.compile('\.png$')}):
  print(img['src'])

正則式:xxx$,『$』表示以『xxx』為結尾的字串,前面的『\』因為『.』是特殊符號『代表任何字』,所以要加入『\』才可以。

要取得.png結尾,而且檔名有python的圖片
if 'python' in img['src'] and img['src'].endswitch('.png')

透過正則式來處理:
for img in soup.find_all('img',{'src': re.compile('python.*\.png$')})

正則式:

  • 『.』代表任何字
  • 『*』代表長度0或是1
  • [1-9] 表示範圍1-9
  • [A-Za-z1-9]+表示字串由A-Za-z1-9所組成
  • 『+』代表長度1或是更長
  • 『\u』代表透過unicode來查詢
  • [\u4e00-\u9fa5]是全部中文字的一個範圍
更多時候,其實前輩們已經寫好了,google一下也不錯。



沒有留言:

張貼留言