您好,登錄后才能下訂單哦!
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) #數據進行編碼生成get方式的請求字段
req = urllib2.Request(url,data) #作為data參數傳遞到Request對象中 POST方式訪問
response = urllib2.urlopen(req) 返回一個類文件對象
the_page = response.read()
soup = BeautifulSoup(the_page,"html.parser") 通過類文件the_page 創建beautifulsoup對象,soup的內容就是頁面的源碼內容
soup.prettify() 格式化后soup內容
構造好BeautifulSoup對象后,借助find()和find_all()這兩個函數,可以通過標簽的不同屬性輕松地把繁多的html內容過濾為你所想要的
url_name = line.get('href') 獲取a標簽的url信息
Title = line.get_text().strip() 獲取a標簽的文本內容
Beautiful Soup支持Python標準庫中的HTML解析器
BeautifulSoup(markup, “html.parser”)
BeautifulSoup(markup, “lxml”)
BeautifulSoup(markup, “html5lib”)
Beautiful Soup將復雜HTML文檔轉換成一個復雜的樹形結構,每個節點都是Python對象
soup.p.attrs 獲取標簽p的屬性信息
find_all( name , attrs , recursive , text , **kwargs )
find_all() 方法搜索當前tag的所有tag子節點,并判斷是否符合過濾器的條件
1.name 參數
傳字符串:soup.find_all('b') 查找文檔中所有的<b>標簽
傳正在表達式 import re for tag in soup.find_all(re.compile("^b")) 正則表達式的 match() 來匹配內容
傳列表 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 參數
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 的關鍵詞,加個下劃線就可以
data_soup.find_all(attrs={"data-foo": "value"}) 特殊屬性用attrs 組成字典進行查詢
3.text 參數
soup.find_all(text="Elsie")
soup.find_all(text=["Tillie", "Elsie", "Lacie"])
soup.find_all(text=re.compile("Dormouse"))
4.limit 參數
soup.find_all("a", limit=2)
5.recursive 參數
soup.html.find_all("title", recursive=False)
find() 與find_all()的區別是,find()直接返回結果
find_all() 和 find() 只搜索當前節點的所有子節點,孫子節點等. find_parents() 和 find_parent() 用來搜索當前節點的父輩節點,搜索方法與普通tag的搜索方法相同,搜索文檔搜索文檔包含的內容
find_next_siblings() 方法返回所有符合條件的后面的兄弟節點,find_next_sibling() 只返回符合條件的后面的第一個tag節點
find_previous_siblings() 方法返回所有符合條件的前面的兄弟節點, find_previous_sibling() 方法返回第一個符合條件的前面的兄弟節點
find_all_next() 方法返回所有符合條件的節點, find_next() 方法返回第一個符合條件的節點
find_all_previous() 方法返回所有符合條件的節點, find_previous()方法返回第一個符合條件的節點
CSS選擇器
1.通過標簽名查找
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[href="http://example.com/elsie"]')
print soup.select('p a[href="http://example.com/elsie"]')
select 方法返回的結果都是列表形式,可以遍歷形式輸出,然后用 get_text() 方法來獲取它的內容
soup.a.attrs) # 獲取a標簽的所有屬性(注意到格式是字典)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。