【爬蟲系列之二】python基礎知識的瞭解

瞭解了 前面的環境搭建,以及python的基礎知識的學習,我們接下來學習一下,如何將網頁扒下來css

1、案例介紹

當咱們打開瀏覽器,打開頁面,看到的是好看的頁面,可是實際上是由瀏覽器解釋才呈現的,實際上這好看的頁面,是經過html,css,js組合造成的。html

接下來,咱們就寫個小例子來扒下來網頁(本篇文章,以python2.7爲例子)python

# coding:utf-8

import urllib2
response = urllib2.urlopen("http://music.163.com/")
print response.read()

2、分析案例的方法

而後讓咱們來分析一下上述例子的代碼是幹啥的segmentfault

第一行:import urllib2 瀏覽器

該行代碼是經過import將python的urllib2庫引入微信

第二行:response = urllib2.urlopen("http://music.163.com/")python2.7

這行代碼是調用urllib2庫中的urlopen方法,而後傳入了一個網易雲音樂的url地址,urlopen方法爲
`urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,socket

cafile=None, capath=None, cadefault=False, context=None)`

其中第一個參數就是url,而後其它幾個參數都是能夠不傳送的,其中第二個參數表示的訪問該網址須要的傳送的數據,第三個參數timeout表示的是過時時間,默認值是socket._GLOBAL_DEFAULT_TIMEOUT學習

第三行:print response.read()
其中response對象有一個read方法,能夠返回獲取到的頁面內容,千萬記得添加上read方法,否則會出現打印出來是對象。網站

3、Request的構造

將上述例子修改下,以下,其中urlopen是能夠傳入一個request請求,它是一個Request類的實例,構造的時候能夠傳入url,data,header等參數,它可讓咱們構造一個request對象,在request請求中添加相關的header頭文件。

# coding:utf-8

import urllib2

request = urllib2.Request("http://music.163.com/")
response = urllib2.urlopen(request)

print response.read()

4、POST和GET數據傳送

GET 數據傳送

GET方式咱們能夠直接把參數寫到網址上面,直接構建一個帶參數的URL出來便可。

import urllib
import urllib2

values = {}
values['wd'] = "zs"
data = urllib.urlencode(values)
url = "http://www.baidu.com/s" + '?' + data
request = urllib2.Request(url)
response = urllib2.urlopen(request)

print response.read()

POST 數據傳送

上面介紹了data參數 ,這裏就是將須要的參數 經過data方式傳入

import urllib
import urllib2
 
values = {}
values['username'] = "1016903103@qq.com"
values['password'] = "XXXX"
data = urllib.urlencode(values) 
url = "https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()

上述代碼引入了urllib庫,如今咱們模擬登錄京東商場,可是應該是沒法登錄的,通常都是須要設置一些頭部header的工做,或者其它的參數,這裏使用了urllib庫對參數,進行urlencode一下。

5、設置headers

上面描述了一下,通常請求都須要帶上各類header屬性。
看下圖,是京東的登錄頁面,而後能夠打開谷歌瀏覽器F12,而後能夠看到請求,上面headers設置了挺多的參數,其中agent是請求的身份,還有refer,都是用來反盜鏈。看下面例子

import urllib  
import urllib2  
 
url = 'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F'
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
refer ='https://www.jd.com/'
values = {'username' : 'cqc',  'password' : 'XXXX' }  
headers = { 'User-Agent' : user_agent,'Refer':refer }  
data = urllib.urlencode(values)  
request = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(request)  
page = response.read()

通常進行爬蟲的時候,能夠考慮檢查瀏覽器的headers的內容

6、Proxy(代理)的設置

urllib2 默認會使用 http_proxy 來設置 HTTP Proxy。假如一個網站它會某一段時間某個IP 的訪問次數,若是訪問次數過多,它會禁止你的訪問。因此你能夠設置一些來幫助你作工做,每隔一段時間換一個代理,網站君都不知道是誰在搗鬼了,這酸爽!
下面一段代碼說明設置方法

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)

7、使用 HTTP 的 PUT 和 DELETE 方法

下面的案例是用來單獨設置http的put和delete,請求

import urllib2
request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'PUT' # or 'DELETE'
response = urllib2.urlopen(request)

推薦閱讀:

【爬蟲系列之一】爬蟲開發環境的搭建

更多精彩內容,歡迎你們關注個人微信公衆號:喝醉的清茶

bVbb6FH?w=258&h=258

相關文章
相關標籤/搜索