1.學習python
urllib2 常用方法
urlopen(url, data, timeout)
urllib2.Request()
urllib.urlencode()
params = {}
get : url + "?" + params
http:請求分析
User-Agent : 有些服務器或 Proxy 會通過該值來判斷是否是瀏覽器發出的請求
Content-Type : 在使用 REST 接口時,服務器會檢查該值,用來確定 HTTP Body 中的內容該怎樣解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 調用時使用
application/json : 在 JSON RPC 調用時使用
application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時使用
在使用服務器提供的 RESTful 或 SOAP 服務時, Content-Type 設置錯誤會導致服務器拒絕服務
import urllib
import urllib2
url = 'http://www.server.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'username' : 'cqc', 'password' : 'XXXX' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
page = response.read()
對付”反盜鏈”的方式,對付防盜鏈,服務器會識別headers中的referer是不是它自己,如果不是,有的服務器不會響應,所以我們還可以在headers中加入referer
代理服務器設置
import urllib2
enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
opener = urllib2.build_opener(proxy_handler)
else:
opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)
使用DebugLog
import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
cookie Cookielib
import urllib2
import cookielib
#聲明一個CookieJar對象實例來保存cookie
cookie = cookielib.CookieJar()
#利用urllib2庫的HTTPCookieProcessor對象來創建cookie處理器
handler=urllib2.HTTPCookieProcessor(cookie)
#通過handler來構建opener
opener = urllib2.build_opener(handler)
#此處的open方法同urllib2的urlopen方法,也可以傳入request
response = opener.open('http://www.baidu.com')
for item in cookie:
print 'Name = '+item.name
print 'Value = '+item.value
保存cookie到文件
import cookielib
import urllib2
#設置保存cookie的文件,同級目錄下的cookie.txt
filename = 'cookie.txt'
#聲明一個MozillaCookieJar對象實例來保存cookie,之后寫入文件
cookie = cookielib.MozillaCookieJar(filename)
#利用urllib2庫的HTTPCookieProcessor對象來創建cookie處理器
handler = urllib2.HTTPCookieProcessor(cookie)
#通過handler來構建opener
opener = urllib2.build_opener(handler)
#創建一個請求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")
#保存cookie到文件
cookie.save(ignore_discard=True, ignore_expires=True)
從文件中獲取Cookie并訪問
import cookielib
import urllib2
#創建MozillaCookieJar實例對象
cookie = cookielib.MozillaCookieJar()
#從文件中讀取cookie內容到變量
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
#創建請求的request
req = urllib2.Request("http://www.baidu.com")
#利用urllib2的build_opener方法創建一個opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(req)
print response.read()
BeautifulSoup 類型
Tag
NavigableString
BeautifulSoup
-Comment
遍歷文檔樹
tag 的 .content 屬性可以將tag的子節點以列表的方式輸出
.children
.descendants 屬性可以對所有tag的子孫節點進行遞歸循環
.strings 獲取多個內容
.stripped_strings 可以去除多余空白內容
.parent 父節點
. parents 所有的父節點
.next_sibling .previous_sibling 兄弟節點
.next_siblings .previous_siblings 所有的兄弟節點
10 .next_element .previous_element 前后節點
.next_elements .previous_elements 所有的前后節點
搜索文檔樹
find_all( name , attrs , recursive , text , **kwargs )
用法類似