『壹』 python爬蟲-常用的請求方式
爬蟲的請求方式常用的有urllib和requests,前者是自帶模塊,後者需要我們自己進行安裝。
安裝requests模塊
注意:在 python2 中,urllib 被分為urllib,urllib2等,在python3中我們直接使用urllib
雖然Python的標罩友梁准庫中 urllib 模塊告鎮已經包含了平常我們使用的大多數功能,但是它的 API 使用起來讓人感覺不太物運好,而 Requests 自稱 "HTTP for Humans",說明使用更簡潔方便。
『貳』 爬蟲是什麼意思
一、python爬蟲是什麼意思
爬蟲:是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。
即:打開一個網頁,有個工具,可以把網頁上的內容獲取下來,存到你想要的地方,這個工具就是爬蟲。
Python爬蟲橘余架構組成:
1.網頁解析器,將一個網頁字元串進行解析,可以按照我們的要求來提取出我們有用的信息,也可以根據DOM樹的解析方式來解析。
2.URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重復抓取URL和循環抓取URL,實現URL管理器主要用三種方式,通過內存、資料庫、緩存資料庫來實現。
3.網頁下載器:通過傳入一個URL地址來下載網頁,將網頁轉換成一個字元串,網頁下載器有urllib2(Python官方基礎模塊)包括需要登錄、代理、和cookie,requests(第三方包)
4.調度器:相當於一台電腦的CPU,主要負責調度URL管理器、下載器、解析器之間的協調工作。
5.應用程序:就是從網頁中提取的有用數據組成的一個應用。
二、爬蟲怎麼抓取頌派數據
1.抓取網頁
抓取網頁有時候需要模擬瀏覽器的行為,很多網站對於生硬的爬蟲抓取都是封殺的。這是我們需要模擬user agent的行為構造合適的請求,比如模擬用戶登陸、模擬session/cookie的存儲和設置。
2.抓取後處理
抓取的網頁通常需要處理,比如過濾html標簽,提取文本等。python的beautifulsoap提供了簡潔的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
其實以上野伍賀功能很多語言和工具都能做,但是用python能夠幹得最快,最干凈。上文介紹了python爬蟲的一些基礎知識,相信大家對於「python爬蟲是什麼意思」與「爬蟲怎麼抓取數據」有一定的的認識了。
現在大數據時代,很多學python的時候都是以爬蟲入手,學習網路爬蟲的人越來越多。通常使用爬蟲抓取數據都會遇到IP限制問題,使用高匿代理,可以突破IP限制,幫助爬蟲突破網站限制次數。
『叄』 python 爬蟲時,urllib2.HTTPError:HTTP Error 502:Bad Gateway是什麼原因怎麼解決
可能是那個網站阻止了這類的訪問,只要在請求中加上偽裝成瀏覽器的header就可以了,比如:
headers={
'User-Agent':'Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.6)Gecko/20091201Firefox/3.5.6'
}
req=urllib2.Request(
url="http://www.qiushike.com/imgrank"
,
headers=headers
)
myResponse=urllib2.urlopen(req)
『肆』 python爬蟲中關於urllib2.Requset和urllib2.build_opener的疑問
為什磨梁么不瞎好運襪舉用reqests呢
import requests
headers = {}
proxies = {}
r = requests.get(url,proxies=proxies,headers=heades,timeout=10)
print r.status
print r.text
print r.content
『伍』 什麼是爬蟲
爬蟲通俗來說就是抓取網頁數據,比如說大家都喜歡的圖片呀、小視頻呀,還有電子書、文字評論、商品詳情等等。
只要網頁上有的,都可以通過爬蟲爬取下來。
一般而言,python爬蟲需要以下幾步:
找到需要爬取內容的網頁URL
打開該網頁的檢查頁面(即查看HTML代碼,按F12快捷鍵即可進入)
在HTML代碼中找到你要提取的數據
寫python代碼進行網頁請求、解析
存儲數據
當然會python是前提,對於小白來說自學也不是件容易的事,需要花相當的時間去適應python的語法邏輯,而且要堅持親手敲代碼,不斷練習。
如果對自己沒有自信,也可以考慮看編程課程,跟著老師的節奏去學習,能比較快地掌握python語法體系,也能得到充分的案例練習。
『陸』 如何用python寫爬蟲來獲取網頁中所有的文章以及關鍵詞
所謂網頁抓取,就是把URL地址中指定的網路資源從網路流中讀取出來,保存到本地。
類似於使用程序模擬IE瀏覽器的功能,把URL作為HTTP請求的內容發送到伺服器端, 然後讀取伺服器端的響應資源。
在Python中,我們使用urllib2這個組件來抓取網頁。
urllib2是Python的一個獲取URLs(Uniform Resource Locators)的組件。
它以urlopen函數的形式提供了一個非常簡單的介面。
最簡單的urllib2的應用代碼只需要四行。
我們新建一個文件urllib2_test01.py來感受一下urllib2的作用:
import urllib2
response = urllib2.urlopen('http://www..com/')
html = response.read()
print html
按下F5可以看到運行的結果:
我們可以打開網路主頁,右擊,選擇查看源代碼(火狐OR谷歌瀏覽器均可),會發現也是完全一樣的內容。
也就是說,上面這四行代碼將我們訪問網路時瀏覽器收到的代碼們全部列印了出來。
這就是一個最簡單的urllib2的例子。
除了"http:",URL同樣可以使用"ftp:","file:"等等來替代。
HTTP是基於請求和應答機制的:
客戶端提出請求,服務端提供應答。
urllib2用一個Request對象來映射你提出的HTTP請求。
在它最簡單的使用形式中你將用你要請求的地址創建一個Request對象,
通過調用urlopen並傳入Request對象,將返回一個相關請求response對象,
這個應答對象如同一個文件對象,所以你可以在Response中調用.read()。
我們新建一個文件urllib2_test02.py來感受一下:
import urllib2
req = urllib2.Request('http://www..com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
可以看到輸出的內容和test01是一樣的。
urllib2使用相同的介面處理所有的URL頭。例如你可以像下面那樣創建一個ftp請求。
req = urllib2.Request('ftp://example.com/')
在HTTP請求時,允許你做額外的兩件事。
1.發送data表單數據
這個內容相信做過Web端的都不會陌生,
有時候你希望發送一些數據到URL(通常URL與CGI[通用網關介面]腳本,或其他WEB應用程序掛接)。
在HTTP中,這個經常使用熟知的POST請求發送。
這個通常在你提交一個HTML表單時由你的瀏覽器來做。
並不是所有的POSTs都來源於表單,你能夠使用POST提交任意的數據到你自己的程序。
一般的HTML表單,data需要編碼成標准形式。然後做為data參數傳到Request對象。
編碼工作使用urllib的函數而非urllib2。
我們新建一個文件urllib2_test03.py來感受一下:
import urllib
import urllib2
url = 'http://www.someserver.com/register.cgi'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
data = urllib.urlencode(values) # 編碼工作
req = urllib2.Request(url, data) # 發送請求同時傳data表單
response = urllib2.urlopen(req) #接受反饋的信息
the_page = response.read() #讀取反饋的內容
如果沒有傳送data參數,urllib2使用GET方式的請求。
GET和POST請求的不同之處是POST請求通常有"副作用",
它們會由於某種途徑改變系統狀態(例如提交成堆垃圾到你的門口)。
Data同樣可以通過在Get請求的URL本身上面編碼來傳送。
import urllib2
import urllib
data = {}
data['name'] = 'WHY'
data['location'] = 'SDU'
data['language'] = 'Python'
url_values = urllib.urlencode(data)
print url_values
name=Somebody+Here&language=Python&location=Northampton
url = 'http://www.example.com/example.cgi'
full_url = url + '?' + url_values
data = urllib2.open(full_url)
這樣就實現了Data數據的Get傳送。
2.設置Headers到http請求
有一些站點不喜歡被程序(非人為訪問)訪問,或者發送不同版本的內容到不同的瀏覽器。
默認的urllib2把自己作為「Python-urllib/x.y」(x和y是Python主版本和次版本號,例如Python-urllib/2.7),
這個身份可能會讓站點迷惑,或者乾脆不工作。
瀏覽器確認自己身份是通過User-Agent頭,當你創建了一個請求對象,你可以給他一個包含頭數據的字典。
下面的例子發送跟上面一樣的內容,但把自身模擬成Internet Explorer。
(多謝大家的提醒,現在這個Demo已經不可用了,不過原理還是那樣的)。
import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
以上就是python利用urllib2通過指定的URL抓取網頁內容的全部內容,非常簡單吧,希望對大家能有所幫助。
『柒』 python爬蟲時,bs4無法讀取網頁標簽中的文本
稍微說一下背景,當時我想研究蛋白質與小分子的復合物在空間三維結構上的一些規律,首先得有數據啊,數據從哪裡來?就是從一個涵蓋所有已經解析三維結構的蛋白質-小分子復合物的資料庫裡面下載。這時候,手動一個個去下顯然是不可取的,我們需要寫個腳本,能從特定的網站選擇性得批量下載需要的信息。python是不錯的選擇。
import urllib #python中用於獲取網站的模塊
import urllib2, cookielib
有些網站訪問時需要cookie的,python處理cookie代碼如下:
cj = ***.cookiejar ( )
opener = ***.build_opener( ***.httpcookieprocessor(cj) )
***.install_opener (opener)
通常我們需要在網站中搜索得到我們需要的信息,這里分為二種情況:
1. 第一種,直接改變網址就可以得到你想要搜索的頁面:
def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/***.cgi?&' + 『你想要搜索的參數』 # 結合自己頁面情況適當修改
page = ***.urlopen(url)
pageContent = ***.read( )
return pageContent #返回的是HTML格式的頁面信息
2.第二種,你需要用到post方法,將你搜索的內容放在postdata裡面,然後返回你需要的頁面
def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx' #這個網址是你進入搜索界面的網址
postData = ***.urlencode( { 各種『post』參數輸入 } ) #這裡面的post參數輸入需要自己去查
req= ***.request (url, postData)
pageContent = ***.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)
這裡面,我們通過添加對標簽的約束來獲取需要的標簽列表, 比如 ***.find_all ('p') 就是尋找名字為『p』的 標簽,而***.find_all (class = "tittle") 就是找到所有class屬性為"tittle" 的標簽,以及***.find_all ( class = ***.compile('lass')) 表示 class屬性中包含『lass』的所有標簽,這里用到了正則表達式(可以自己學習一下,非常有用滴)
當我們獲取了所有想要標簽的列表之後,遍歷這個列表,再獲取標簽中你需要的內容,通常我們需要標簽中的文字部分,也就是網頁中顯示出來的文字,代碼如下:
tagList = ***.find_all (class="tittle") #如果標簽比較復雜,可以用多個過濾條件使過濾更加嚴格
for tag in tagList:
print ***.text
***.write ( str(***.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()方法返回第一個符合條件的節點
具體的使用方法還有很多,用到這里你應該可以解決大部分問題了,如果要更深入了解可以參考官方的使用說明哈!
『捌』 python爬蟲程序中urllib2改成什麼了
不慶喊知道你塵差掘問的是不是py3中的urllib2變成什麼派核了……
urllib2合並為urllib.request
醬紫……
『玖』 「python爬蟲保姆級教學」urllib的使用以及頁面解析
使用urllib來獲取網路首頁的源碼
get請求參數,如果是中文,需要對中文進行編碼,如下面這樣,如果不編碼會報錯。
urlencode應用場景:多個參數的時候。如下
為什麼要學習handler?
為什麼需要代理?因為有的網站是禁止爬蟲的宴薯肆,如果用真實的ip去爬蟲,容易被封掉。
2.解析技術
1.安裝lxml庫
2.導入lxml.etree
3.etree.parse() 解析本地文晌轎件
4.etree.HTML() 伺服器響應文件
5.解析獲取DOM元素
1.路徑查詢
2.謂詞查詢
3.屬性查詢
4.模糊查詢
5.內容查詢
6.邏輯運算
示例:
JsonPath只能解析本地文件。
pip安裝:
jsonpath的使用:
示例:
解析上面的json數據
缺點:效率沒有lxml的效率高
優點:介面設計人性化,使用方便
pip install bs4 -i https://pypi.douban.com/simple
from bs4 import BeautifulSoup
1.根據標簽名查找節點
soup.a.attrs
2.函數
find(『a』):只找到第一個a標簽
find(『a』, title=『名字』)
find(『a』, class_=『名字』)
find_all(『a』) :查找到所有的a
find_all([『a』手盯, 『span』]) 返回所有的a和span
find_all(『a』, limit=2) 只找前兩個a
obj.string
obj.get_text()【推薦】
tag.name:獲取標簽名
tag.attrs:將屬性值作為一個字典返回
obj.attrs.get(『title』)【常用】
obj.get(『title』)
obj[『title』]
示例:
使用BeautifulSoup解析上面的html