1. 程式人生 > >BeautifulSoup 提取某個tag標籤裡面的內容

BeautifulSoup 提取某個tag標籤裡面的內容

用的版本是BeautifulSoup4,用起來的確要比 re 好用一些,不用一個個的去寫正則表示式,這樣還是挺方便的。

比如我要獲取高匿代理IP頁面上的IP和埠,網址這裡:點選開啟連結,它的組織方式是這樣的,如下圖:


IP和埠 tr.td 標籤裡面,tr有class屬性,屬性有兩種情況的值,對於這點我們可以用正則表示式來匹配下。當提取某一個標籤裡的具體內容時,可以用bs的 .string屬性,注意:用 .string 屬性來提取標籤裡的內容時,該標籤應該是隻有單個節點的。比如上面的 td 標籤那樣。下面直接上程式碼了。

import requests
from bs4 import BeautifulSoup
import re
import os.path

user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)'
headers = {'User-Agent': user_agent}

session = requests.session()
page = session.get("http://www.xicidaili.com/nn/1", headers=headers)
soup = BeautifulSoup(page.text,'lxml')  #這裡沒有裝lxml的話,把它去掉用預設的就好

#匹配帶有class屬性的tr標籤
taglist = soup.find_all('tr', attrs={'class': re.compile("(odd)|()")})
for trtag in taglist:
    tdlist = trtag.find_all('td')  #在每個tr標籤下,查詢所有的td標籤
    print tdlist[1].string   #這裡提取IP值
    print tdlist[2].string   #這裡提取埠值

結果如下:

124.88.67.24
80
61.224.239.71
8080
113.3.78.124
8118
61.227.228.141
8080
222.130.171.58
8118
123.57.190.51
7777
183.61.71.112
8888
120.25.171.183
8080
1.164.146.91
8080
101.201.235.141
8000
121.193.143.249
80
118.180.15.152
8102
124.88.67.19
80
。
。
。
。
。
。
。