當前位置:首頁 » 編程語言 » openerpython

openerpython

發布時間: 2022-08-21 08:21:00

1. python怎麼偽裝成瀏覽器訪問網站

把請求頭信息都弄上,然後把cookie也弄好
import urllib.request

url = "http://www.oschina.net/"
headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')

opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()

print(data)

2. 怎樣理解python里的Cookie和opener

以人人中的一個超級鏈接為例,

我們建一個urllib2_test10.py來比較一下原始URL和重定向的鏈接:

[python] view plain
from urllib2 import Request, urlopen, URLError, HTTPError

old_url = 'http://rrurl.cn/b1UZuP'
req = Request(old_url)
response = urlopen(req)
print 'Old url :' + old_url
print 'Real url :' + response.geturl()
運行之後可以看到真正的鏈接指向的網址:

2.info():
這個返回對象的字典對象,該字典描述了獲取的頁面情況。通常是伺服器發送的特定頭headers。目前是httplib.HTTPMessage 實例。
經典的headers包含"Content-length","Content-type",和其他內容。

我們建一個urllib2_test11.py來測試一下info的應用:
[python] view plain
from urllib2 import Request, urlopen, URLError, HTTPError

old_url = 'http://www..com'
req = Request(old_url)
response = urlopen(req)
print 'Info():'
print response.info()
運行的結果如下,可以看到頁面的相關信息:

下面來說一說urllib2中的兩個重要概念:Openers和Handlers。
1.Openers:
當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。
正常情況下,我們使用默認opener:通過urlopen。
但你能夠創建個性的openers。
2.Handles:
Openers使用處理器handlers,所有的「繁重」工作由handlers處理。
每個handlers知道如何通過特定協議打開URLs,或者如何處理URL打開時的各個方面。
例如HTTP重定向或者HTTP cookies。

如果你希望用特定處理器獲取URLs你會想創建一個openers,例如獲取一個能處理cookie的opener,或者獲取一個不重定向的opener。

要創建一個 opener,可以實例化一個OpenerDirector,
然後調用.add_handler(some_handler_instance)。
同樣,可以使用build_opener,這是一個更加方便的函數,用來創建opener對象,他只需要一次函數調用。
build_opener默認添加幾個處理器,但提供快捷的方法來添加或更新默認處理器。

其他的處理器handlers你或許會希望處理代理,驗證,和其他常用但有點特殊的情況。

install_opener 用來創建(全局)默認opener。這個表示調用urlopen將使用你安裝的opener。

Opener對象有一個open方法。
該方法可以像urlopen函數那樣直接用來獲取urls:通常不必調用install_opener,除了為了方便。

說完了上面兩個內容,下面我們來看一下基本認證的內容,這里會用到上面提及的Opener和Handler。
Basic Authentication 基本驗證

為了展示創建和安裝一個handler,我們將使用HTTPBasicAuthHandler。
當需要基礎驗證時,伺服器發送一個header(401錯誤碼) 請求驗證。這個指定了scheme 和一個『realm』,看起來像這樣:Www-authenticate: SCHEME realm="REALM".
例如
Www-authenticate: Basic realm="cPanel Users"

客戶端必須使用新的請求,並在請求頭里包含正確的姓名和密碼。
這是「基礎驗證」,為了簡化這個過程,我們可以創建一個HTTPBasicAuthHandler的實例,並讓opener使用這個handler就可以啦。

HTTPBasicAuthHandler使用一個密碼管理的對象來處理URLs和realms來映射用戶名和密碼。
如果你知道realm(從伺服器發送來的頭里)是什麼,你就能使用HTTPPasswordMgr。

通常人們不關心realm是什麼。那樣的話,就能用方便的。
這個將在你為URL指定一個默認的用戶名和密碼。
這將在你為特定realm提供一個其他組合時得到提供。
我們通過給realm參數指定None提供給add_password來指示這種情況。

最高層次的URL是第一個要求驗證的URL。你傳給.add_password()更深層次的URLs將同樣合適。
說了這么多廢話,下面來用一個例子演示一下上面說到的內容。

我們建一個urllib2_test12.py來測試一下info的應用:
[python] view plain
# -*- coding: utf-8 -*-
import urllib2

# 創建一個密碼管理者
password_mgr = urllib2.()

# 添加用戶名和密碼

top_level_url = "http://example.com/foo/"

# 如果知道 realm, 我們可以使用他代替 ``None``.
# password_mgr.add_password(None, top_level_url, username, password)
password_mgr.add_password(None, top_level_url,'why', '1223')

# 創建了一個新的handler
handler = urllib2.HTTPBasicAuthHandler(password_mgr)

# 創建 "opener" (OpenerDirector 實例)
opener = urllib2.build_opener(handler)

a_url = 'http://www..com/'

# 使用 opener 獲取一個URL
opener.open(a_url)

# 安裝 opener.
# 現在所有調用 urllib2.urlopen 將用我們的 opener.
urllib2.install_opener(opener)

注意:以上的例子我們僅僅提供我們的HHTPBasicAuthHandler給build_opener。
默認的openers有正常狀況的handlers:ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler,FTPHandler, FileHandler, HTTPErrorProcessor。
代碼中的top_level_url 實際上可以是完整URL(包含"http:",以及主機名及可選的埠號)。
例如:http://example.com/。
也可以是一個「authority」(即主機名和可選的包含埠號)。
例如:「example.com」 or 「example.com:8080」。
後者包含了埠號。

3. 請教如何用python下載文件到本地

知道文件的url地址就用urllib模塊的urlretrieve函數。urllib.urlretrieve(url,
filename)filename是要保存到本地的文件名。函數後面還有2個可選參數,要用就看幫助文檔吧。多線下載的話,每一線程要指定下載伺服器上文件的哪一塊。http協議中head里可以指定Range。下面用的是urllib2模塊request
=
urllib2.Request(url)request.add_header("Range",
"bytes=%d-%d"%(1024,
204)
#指定下載文件的范圍opener
=
urllib2.build_opener()data
=
opener.open(request).read()現在data裡面就是文件的1024位元組到2048位元組的內容。

4. 怎麼使用python來爬取網頁上的表格信息

稍微說一下背景,當時我想研究蛋白質與小分子的復合物在空間三維結構上的一些規律,首先得有數據啊,數據從哪裡來?就是從一個涵蓋所有已經解析三維結構的蛋白質-小分子復合物的資料庫裡面下載。這時候,手動一個個去下顯然是不可取的,我們需要寫個腳本,能從特定的網站選擇性得批量下載需要的信息。python是不錯的選擇。

import urllib #python中用於獲取網站的模塊
import urllib2, cookielib

有些網站訪問時需要cookie的,python處理cookie代碼如下:
cj = cookielib.CookieJar ( )
opener = urllib2.build_opener( urllib2.HttpCookieProcessor(cj) )
urllib2.install_opener (opener)

通常我們需要在網站中搜索得到我們需要的信息,這里分為二種情況:

1. 第一種,直接改變網址就可以得到你想要搜索的頁面:

def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx.cgi?&' + 『你想要搜索的參數』 # 結合自己頁面情況適當修改
page = urllib2.urlopen(url)
pageContent = page.read( )
return pageContent #返回的是HTML格式的頁面信息

2.第二種,你需要用到post方法,將你搜索的內容放在postdata裡面,然後返回你需要的頁面

def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx' #這個網址是你進入搜索界面的網址
postData = urllib.urlencode( { 各種『post』參數輸入 } ) #這裡面的post參數輸入需要自己去查
req= urllib2.Request (url, postData)
pageContent = urllib2.urlopen (req). read( )
return pageContent #返回的是HTML格式的頁面信息

在獲取了我們需要的網頁信息之後,我們需要從獲得的網頁中進一步獲取我們需要的信息,這里我推薦使用 BeautifulSoup 這個模塊, python自帶的沒有,可以自行網路谷歌下載安裝。 BeautifulSoup 翻譯就是『美味的湯』,你需要做的是從一鍋湯裡面找到你喜歡吃的東西。

import re # 正則表達式,用於匹配字元
from bs4 import BeautifulSoup # 導入BeautifulSoup 模塊

soup = BeautifulSoup(pageContent) #pageContent就是上面我們搜索得到的頁面

soup就是 HTML 中所有的標簽(tag)BeautifulSoup處理格式化後的字元串,一個標準的tag形式為:

hwkobe24

通過一些過濾方法,我們可以從soup中獲取我們需要的信息:

(1) find_all ( name , attrs , recursive , text , **kwargs)
這裡面,我們通過添加對標簽的約束來獲取需要的標簽列表, 比如 soup.find_all ('p') 就是尋找名字為『p』的 標簽,而soup.find_all (class = "tittle") 就是找到所有class屬性為"tittle" 的標簽,以及soup.find_all ( class = re.compile('lass')) 表示 class屬性中包含『lass』的所有標簽,這里用到了正則表達式(可以自己學習一下,非常有用滴)

當我們獲取了所有想要標簽的列表之後,遍歷這個列表,再獲取標簽中你需要的內容,通常我們需要標簽中的文字部分,也就是網頁中顯示出來的文字,代碼如下:

tagList = soup.find_all (class="tittle") #如果標簽比較復雜,可以用多個過濾條件使過濾更加嚴格

for tag in tagList:
print tag.text
f.write ( str(tag.text) ) #將這些信息寫入本地文件中以後使用

(2)find( name , attrs , recursive , text , **kwargs )

它與 find_all( ) 方法唯一的區別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果

(3)find_parents( ) find_parent( )

find_all() 和 find() 只搜索當前節點的所有子節點,孫子節點等. find_parents() 和 find_parent() 用來搜索當前節點的父輩節點,搜索方法與普通tag的搜索方法相同,搜索文檔搜索文檔包含的內容

(4)find_next_siblings() find_next_sibling()

這2個方法通過 .next_siblings 屬性對當 tag 的所有後面解析的兄弟 tag 節點進代, find_next_siblings() 方法返回所有符合條件的後面的兄弟節點,find_next_sibling() 只返回符合條件的後面的第一個tag節點

(5)find_previous_siblings() find_previous_sibling()

這2個方法通過 .previous_siblings 屬性對當前 tag 的前面解析的兄弟 tag 節點進行迭代, find_previous_siblings()方法返回所有符合條件的前面的兄弟節點, find_previous_sibling() 方法返回第一個符合條件的前面的兄弟節點

(6)find_all_next() find_next()

這2個方法通過 .next_elements 屬性對當前 tag 的之後的 tag 和字元串進行迭代, find_all_next() 方法返回所有符合條件的節點, find_next() 方法返回第一個符合條件的節點

(7)find_all_previous() 和 find_previous()

這2個方法通過 .previous_elements 屬性對當前節點前面的 tag 和字元串進行迭代, find_all_previous() 方法返回所有符合條件的節點, find_previous()方法返回第一個符合條件的節點

具體的使用方法還有很多,用到這里你應該可以解決大部分問題了,如果要更深入了解可以參考官方的使用說明哈!

5. python3 opener.open怎麼用

當使用布爾數組直接作為下標對象或者元組下標對象中有布爾數組時,都相當於用nonzero()將布爾數組轉換成一組整數數組,然後使用整數數組進行下標運算。

6. python 網路爬蟲的opener是什麼意思

在開始後面的內容之前,先來解釋一下urllib2中的兩個個方法:info and geturl
urlopen返回的應答對象response(或者HTTPError實例)有兩個很有用的方法info()和geturl()

1.geturl():
這個返回獲取的真實的URL,這個很有用,因為urlopen(或者opener對象使用的)或許會有重定向。獲取的URL或許跟請求URL不同。

7. 使用python採集網頁內容時那登錄那個網站,否則採集不了!請問怎麼實現python登錄後採集網頁

有些網頁需要你登錄之後才可以訪問,你需要提供賬戶和密碼。
只要在發送http請求時,帶上含有正常登陸的cookie就可以了。
1.首先我們要先了解cookie的工作原理。
Cookie是由伺服器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給伺服器(前提是瀏覽器設置為啟用cookie)。Cookie名稱和值可以由伺服器端開發自己定義,對於JSP而言也可以直接寫入jsessionid,這樣伺服器可以知道該用戶是否合法用戶以及是否需要重新登錄等。
2.之後我們要獲取到用戶正常登錄的cookie.
python提供了cookieJar的庫,只要把cookieJar的實例作為參數傳到urllib2的一個opener裡面。
然後訪問一次登錄的頁面,cookie就已經保存下來了。之後通過這個實例訪問所有的頁面都帶有正常登陸的cookie了。
以人人網為例子。
#encoding=utf-8
import urllib2
import urllib
import cookielib
def renrenBrower(url,user,password):
#登陸頁面,可以通過抓包工具分析獲得,如fiddler,wireshark
login_page = "http://www.renren.com/PLogin.do"
try:
#獲得一個cookieJar實例
cj = cookielib.CookieJar()
#cookieJar作為參數,獲得一個opener的實例
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#偽裝成一個正常的瀏覽器,避免有些web伺服器拒絕訪問。
opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]
#生成Post數據,含有登陸用戶名密碼。
data = urllib.urlencode({"email":user,"password":password})
#以post的方法訪問登陸頁面,訪問之後cookieJar會自定保存cookie
opener.open(login_page,data)
#以帶cookie的方式訪問頁面
op=opener.open(url)
#讀取頁面源碼
data= op.read()
return data
except Exception,e:
print str(e)
#訪問某用戶的個人主頁,其實這已經實現了人人網的簽到功能。
print renrenBrower("http://www.renren.com/home","用戶名","密碼")

8. 如何使用python解決網站的反爬蟲

1、從用戶請求的Headers反爬蟲是最常見的反爬蟲策略。
偽裝header。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復制到爬蟲的Headers中;或者將Referer值修改為目標網站域名[評論:往往容易被忽略,通過對請求的抓包分析,確定referer,在程序中模擬訪問請求頭中添加]。對於檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。
2、基於用戶行為反爬蟲
還有一部分網站是通過檢測用戶行為,例如同一IP短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。[這種防爬,需要有足夠多的ip來應對]
(1)、大多數網站都是前一種情況,對於這種情況,使用IP代理就可以解決。可以專門寫一個爬蟲,爬取網上公開的代理ip,檢測後全部保存起來。有了大量代理ip後可以每請求幾次更換一個ip,這在requests或者urllib中很容易做到,這樣就能很容易的繞過第一種反爬蟲。
編寫爬蟲代理:
步驟:
1.參數是一個字典{'類型':'代理ip:埠號'}
proxy_support=urllib.request.ProxyHandler({})
2.定製、創建一個opener
opener=urllib.request.build_opener(proxy_support)
3a.安裝opener
urllib.request.install_opener(opener)
3b.調用opener
opener.open(url)
用大量代理隨機請求目標網站,應對反爬蟲

9. python里的opener返回的是伺服器的數據嗎

當使用布爾數組直接作為下標對象或者元組下標對象中有布爾數組時,都相當於用nonzero()將布爾數組轉換成一組整數數組,然後使用整數數組進行下標運算。

10. 怎樣理解python里的Cookie和opener

你發的這個方法只是創建request的opener對象 cj = http.cookiejar.CookieJar() #創建一個cookie對象,不傳遞參數說明創建了一個空的cookie對象 pro = urllib.request.HTTPCookieProcessor(cj) #創建一個cookie管理對象,來管理cj opener = urlli...

熱點內容
建立雲存儲 發布:2024-05-03 21:04:03 瀏覽:74
socket編程php 發布:2024-05-03 20:12:50 瀏覽:207
坦洲郵政局可以解壓嗎 發布:2024-05-03 20:09:55 瀏覽:732
二級程序編譯答案 發布:2024-05-03 18:41:35 瀏覽:654
領動自動精英版是哪個配置 發布:2024-05-03 18:37:30 瀏覽:151
java編譯器中cd什麼意思 發布:2024-05-03 18:36:00 瀏覽:390
傳奇伺服器如何刷錢 發布:2024-05-03 18:36:00 瀏覽:978
安卓版twitter怎麼注冊 發布:2024-05-03 18:28:05 瀏覽:894
Python邏輯優先順序 發布:2024-05-03 18:26:14 瀏覽:268
linux查看svn密碼 發布:2024-05-03 18:12:47 瀏覽:805