十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {}
values['name'] = 'Michael Foord'
values['location'] = 'Northampton'
values['language'] = 'Python'
data = urllib.urlencode(values) #數(shù)據(jù)進行編碼生成get方式的請求字段
req = urllib2.Request(url,data) #作為data參數(shù)傳遞到Request對象中 POST方式訪問
response = urllib2.urlopen(req) 返回一個類文件對象
the_page = response.read()
soup = BeautifulSoup(the_page,"html.parser") 通過類文件the_page 創(chuàng)建beautifulsoup對象,soup的內(nèi)容就是頁面的源碼內(nèi)容
soup.prettify() 格式化后soup內(nèi)容
構(gòu)造好BeautifulSoup對象后,借助find()和find_all()這兩個函數(shù),可以通過標(biāo)簽的不同屬性輕松地把繁多的html內(nèi)容過濾為你所想要的
url_name = line.get('href') 獲取a標(biāo)簽的url信息
Title = line.get_text().strip() 獲取a標(biāo)簽的文本內(nèi)容
Beautiful Soup支持Python標(biāo)準(zhǔn)庫中的HTML解析器
BeautifulSoup(markup, “html.parser”)
BeautifulSoup(markup, “l(fā)xml”)
BeautifulSoup(markup, “html5lib”)
Beautiful Soup將復(fù)雜HTML文檔轉(zhuǎn)換成一個復(fù)雜的樹形結(jié)構(gòu),每個節(jié)點都是Python對象
soup.p.attrs 獲取標(biāo)簽p的屬性信息
find_all( name , attrs , recursive , text , **kwargs )
find_all() 方法搜索當(dāng)前tag的所有tag子節(jié)點,并判斷是否符合過濾器的條件
1.name 參數(shù)
傳字符串:soup.find_all('b') 查找文檔中所有的標(biāo)簽
傳正在表達式 import re for tag in soup.find_all(re.compile("^b")) 正則表達式的 match() 來匹配內(nèi)容
傳列表 soup.find_all(["a", "b"])
傳True for tag in soup.find_all(True) 查找到所有的tag
傳方法
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id('p'))
2.keyword 參數(shù)
soup.find_all(id='link2')
soup.find_all(href=re.compile("elsie"))
soup.find_all(href=re.compile("elsie"), id='link1')
soup.findall("a", class="sister") 用 class 過濾, class 是 python 的關(guān)鍵詞,加個下劃線就可以
data_soup.find_all(attrs={"data-foo": "value"}) 特殊屬性用attrs 組成字典進行查詢
3.text 參數(shù)
soup.find_all(text="Elsie")
soup.find_all(text=["Tillie", "Elsie", "Lacie"])
soup.find_all(text=re.compile("Dormouse"))
4.limit 參數(shù)
soup.find_all("a", limit=2)
5.recursive 參數(shù)
soup.html.find_all("title", recursive=False)
find() 與find_all()的區(qū)別是,find()直接返回結(jié)果
find_all() 和 find() 只搜索當(dāng)前節(jié)點的所有子節(jié)點,孫子節(jié)點等. find_parents() 和 find_parent() 用來搜索當(dāng)前節(jié)點的父輩節(jié)點,搜索方法與普通tag的搜索方法相同,搜索文檔搜索文檔包含的內(nèi)容
find_next_siblings() 方法返回所有符合條件的后面的兄弟節(jié)點,find_next_sibling() 只返回符合條件的后面的第一個tag節(jié)點
find_previous_siblings() 方法返回所有符合條件的前面的兄弟節(jié)點, find_previous_sibling() 方法返回第一個符合條件的前面的兄弟節(jié)點
find_all_next() 方法返回所有符合條件的節(jié)點, find_next() 方法返回第一個符合條件的節(jié)點
find_all_previous() 方法返回所有符合條件的節(jié)點, find_previous()方法返回第一個符合條件的節(jié)點
CSS選擇器
1.通過標(biāo)簽名查找
print soup.select('title')
print soup.select('a')
2.通過類名查找
print soup.select('.sister')
3.通過 id 名查找
print soup.select('#link1')
4.組合查找
print soup.select('p #link1')
5.屬性查找
print soup.select('a[class="sister"]')
print soup.select('a[)
print soup.select('p a[)
select 方法返回的結(jié)果都是列表形式,可以遍歷形式輸出,然后用 get_text() 方法來獲取它的內(nèi)容
soup.a.attrs) # 獲取a標(biāo)簽的所有屬性(注意到格式是字典)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。