Python爬蟲入門之Urllib庫的基本使用

  那么接下來,小伙伴們就一起和我真正邁向我們的爬蟲之路吧。

1.分分鐘扒一個網頁下來

  怎樣扒網頁呢?其實就是根據URL來獲取它的網頁信息,雖然我們在瀏覽器中看到的是一幅幅優美的畫面,但是其實是由瀏覽器解釋才呈現出來的,實質它是一段HTML代碼,加 JS、CSS,如果把網頁比作一個人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服。所以最重要的部分是存在于HTML中的,下面我們就寫個例子來扒一個網頁下來。

1 import urllib2
2 
3 response=urllib2.urlopen("http://www.baidu.com")
4 print(response.read())

2.分析扒網頁的方法

  那么我們來分析這兩行代碼,第一行

1 response = urllib2.urlopen("http://www.baidu.com")

?  首先我們調用的是urllib2庫里面的urlopen方法,傳入一個URL,這個網址是百度首頁,協議是HTTP協議,當然你也可以把HTTP換做FTP,FILE,HTTPS 等等,只是代表了一種訪問控制協議,urlopen一般接受三個參數,它的參數如下:

1 urlopen(url, data, timeout)

  第一個參數url即為URL,第二個參數data是訪問URL時要傳送的數據,第三個timeout是設置超時時間。

  第二三個參數是可以不傳送的,data默認為空None,timeout默認為 socket._GLOBAL_DEFAULT_TIMEOUT

  第一個參數URL是必須要傳送的,在這個例子里面我們傳送了百度的URL,執行urlopen方法之后,返回一個response對象,返回信息便保存在這里面。

1 print response.read()

  response對象有一個read方法,可以返回獲取到的網頁內容。

  如果不加read直接打印會是什么?答案如下:

1 <addinfourl at 139728495260376 whose fp = <socket._fileobject object at 0x7f1513fb3ad0>>

  直接打印出了該對象的描述,所以記得一定要加read方法,否則它不出來內容可就不怪我咯!

3.構造Requset

  其實上面的urlopen參數可以傳入一個request請求,它其實就是一個Request類的實例,構造時需要傳入Url,Data等等的內容。比如上面的兩行代碼,我們可以這么改寫

1 import urllib2
2 
3 request = urllib2.Request("http://www.baidu.com")
4 response = urllib2.urlopen(request)
5 print response.read()

  ?運行結果是完全一樣的,只不過中間多了一個request對象,推薦大家這么寫,因為在構建請求時還需要加入好多內容,通過構建一個request,服務器響應請求得到應答,這樣顯得邏輯上清晰明確。

4.POST和GET數據傳送

  上面的程序演示了最基本的網頁抓取,不過,現在大多數網站都是動態網頁,需要你動態地傳遞參數給它,它做出對應的響應。所以,在訪問時,我們需要傳遞數據給它。最常見的情況是什么?對了,就是登錄注冊的時候呀。

  把數據用戶名和密碼傳送到一個URL,然后你得到服務器處理之后的響應,這個該怎么辦?下面讓我來為小伙伴們揭曉吧!

  數據傳送分為POST和GET兩種方式,兩種方式有什么區別呢?

  最重要的區別是GET方式是直接以鏈接形式訪問,鏈接中包含了所有的參數,當然如果包含了密碼的話是一種不安全的選擇,不過你可以直觀地看到自己提交了什么內容。POST則不會在網址上顯示所有的參數,不過如果你想直接查看提交了什么就不太方便了,大家可以酌情選擇。

  POST方式:

  上面我們說了data參數是干嘛的?對了,它就是用在這里的,我們傳送的數據就是這個參數data,下面演示一下POST方式。

1 import urllib
2 import urllib2
3 
4 values = {"username":"1016903103@qq.com","password":"XXXX"}
5 data = urllib.urlencode(values) 
6 url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
7 request = urllib2.Request(url,data)
8 response = urllib2.urlopen(request)
9 print response.read()

  我們引入了urllib庫,現在我們模擬登陸CSDN,當然上述代碼可能登陸不進去,因為CSDN還有個流水號的字段,沒有設置全,比較復雜在這里就不寫上去了,在此只是說明登錄的原理。一般的登錄網站一般是這種寫法。

  我們需要定義一個字典,名字為values,參數我設置了username和password,下面利用urllib的urlencode方法將字典編碼,命名為data,構建request時傳入兩個參數,url和data,運行程序,返回的便是POST后呈現的頁面內容。

  注意上面字典的定義方式還有一種,下面的寫法是等價的

 1 import urllib
 2 import urllib2
 3 
 4 values = {}
 5 values['username'] = "1016903103@qq.com"
 6 values['password'] = "XXXX"
 7 data = urllib.urlencode(values) 
 8 url = "http://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
 9 request = urllib2.Request(url,data)
10 response = urllib2.urlopen(request)
11 print response.read()

  ?以上方法便實現了POST方式的傳送

  GET方式:

  至于GET方式我們可以直接把參數寫到網址上面,直接構建一個帶參數的URL出來即可。

 1 import urllib
 2 import urllib2
 3 
 4 values={}
 5 values['username'] = "1016903103@qq.com"
 6 values['password']="XXXX"
 7 data = urllib.urlencode(values) 
 8 url = "http://passport.csdn.net/account/login"
 9 geturl = url + "?"+data
10 request = urllib2.Request(geturl)
11 response = urllib2.urlopen(request)
12 print response.read()

  你可以print geturl,打印輸出一下url,發現其實就是原來的url加?然后加編碼后的參數

1 http://passport.csdn.net/account/login?username=1016903103%40qq.com&password=XXXX

  和我們平常GET訪問方式一模一樣,這樣就實現了數據的GET方式傳送。

  本節講解了一些基本使用,可以抓取到一些基本的網頁信息,小伙伴們加油!

  轉載整理自:靜覓 ? Python爬蟲入門三之Urllib庫的基本使用,感謝版主的分享。

轉載于:https://www.cnblogs.com/AlwaysWIN/p/6236748.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456615.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python】hashlib.shasha256練習注冊 --筆記

用戶注冊和登錄import csv import hashlib#注冊將用戶信息填寫到csv文件中 def register():username input(用戶名:)password input(密碼:)user []user.append(username)user.append(hashlib.sha256(password.encode(utf-8)).hexdigest())with open(t2/users.csv, a, newlin…

《3ds Max瘋狂設計學院》——1.6節3ds Max 2016新增的主要功能

本節書摘來自異步社區《3ds Max瘋狂設計學院》一書中的第1章&#xff0c;第1.6節3ds Max 2016新增的主要功能&#xff0c;作者 曹茂鵬&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 1.6 3ds Max 2016新增的主要功能1&#xff0e;Max Creation Graph3ds Max…

大數據之Kafka內部原理詳細介紹

目錄前言&#xff1a;1、Kafka整體結構2、Consumer與topic關系3、Kafka消息的分發4、Consumer的負載均衡5、kafka文件存儲機制總結&#xff1a; 目錄 前言&#xff1a; 本篇文章所介紹的內容還是以了解為主&#xff0c;主要目的還是為了對Kafka有一個更深入的理解。主要介紹…

【python】urllib和urllib3,requests 簡要概括---筆記

urllib和urllib3&#xff0c;requestsurl:協議://存放資源的地址&#xff08;域名&#xff09;/具體的資源https://bj.lianjia.com/zufang/dghfjhsjdf648.htmlurllib.request 用來發出請求urllib.parseurllib.request.urlopen(str) --->response對象request urllib.reques…

JS與APP原生控件交互

“熱更新”、“熱部署”相信對于混合式開發的童鞋一定不陌生&#xff0c;那么APP怎么避免每次升級都要在APP應用商店發布呢&#xff1f;這里就用到了混合式開發的概念&#xff0c;對于電商網站尤其顯得重要&#xff0c;不可能每次發布一個活動&#xff0c;都要發布一個現版本&a…

《脫穎而出——成功網店經營之道》一2.6 連橫:返利模式的應用及分銷

本節書摘來異步社區《脫穎而出——成功網店經營之道》一書中的第2章&#xff0c;第2.6節&#xff0c;作者&#xff1a; 何小健 責編&#xff1a; 趙軒, 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.6 連橫&#xff1a;返利模式的應用及分銷 脫穎而出——成功網店…

【python】os模塊 遞歸刪除文件夾所有文件 --筆記

os.environ 獲取系統的環境變量 os.name nt -- windows \r\n | posix --- Linux \nos.path: import osprint(os.environ) print(os.environ[OS])print(os.path.abspath(t1/file01.py)) # 獲取絕對路徑 print(os.path.isabs(t1/file01.py)) # 判斷所給的路徑是否是一個絕對…

大數據之Spark集群安裝及簡單使用

目錄1、Spark集群安裝1.1. 安裝 2、啟動Spark Shell2.1、啟動spark shell2.2、在spark shell中編寫WordCount程序 目錄 1、Spark集群安裝 1.1. 安裝 1.1.1. 機器部署 準備兩臺以上Linux服務器&#xff0c;安裝好JDK1.7 1.1.2. 下載Spark安裝包 下載地址&#xff1a;ht…

《C和C++代碼精粹》——1.7 類型安全I/O

本節書摘來自異步社區出版社《C和C代碼精粹》一書中的第1章第1.7節&#xff0c;作者&#xff1a; 【美】Chuck Allison&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.7 類型安全I/O C和C代碼精粹當然每個C程序員都曾經使用過printf的錯誤格式描述符號。…

大數據之Spark簡介及RDD說明

目錄前言&#xff1a;1、Spark概述1.1、什么是Spark&#xff08;官網&#xff1a;http://spark.apache.org&#xff09;1.2、為什么要學Spark1.3、Spark特點 2、RDD概述2.1、什么是RDD2.2、RDD的屬性2.3、創建RDD的兩種方式2.4、RDD編程API2.5、RDD的依賴關系2.6、RDD的緩存2.7…

Python3中urlopen()詳解

一. 簡介 urllib.request.urlopen()函數用于實現對目標url的訪問。 函數原型如下&#xff1a;urllib.request.urlopen(url, dataNone, [timeout, ]*, cafileNone, capathNone, cadefaultFalse, contextNone)  url: 需要打開的網址 data&#xff1a;Post提交的數據 timeo…

python面向對象實現簡易銀行管理員頁面系統

銀行管理員頁面系統設計:card 類&#xff1a; cardId password moneyuser 類: username phone id cards[]銀行的工作人員: 賬號 密碼 登錄 展現管理系統所有功能Bank類:開戶取錢存錢轉賬銷戶查賬解鎖... import pickle import random# 銀行卡 import time#card 類…

單子模式

package test; class aceing { /** param args */ private static aceing ace; public aceing() { super(); System.out.println("aceing類中的無參構造器調用了"); } public static aceing getAceing() { if(ace null) { ace new aceing(); } return ace; }} pack…

《塑造互聯網思維的企業》一一第4章 全球商務向社會化媒體的轉變

第4章 全球商務向社會化媒體的轉變 塑造互聯網思維的企業社會化媒體在發達國家的廣泛采用已是我們所熟知的&#xff0c;它在社會和全球文化產生的大范圍變革中至關重要。為了完全了解其中的原因&#xff0c;有必要探究一下那些推動社會化商務的復雜且相互關聯的因素的共同影響…

大數據之SparkSQL簡介及DataFrame的使用

目錄前言&#xff1a;1、Spark SQL1.1、Spark SQL概述1.2、DataFrames1.3、DataFrame常用操作 總結&#xff1a; 目錄 前言&#xff1a; 本文主要介紹下SparkSQL以及SparkSQL的簡單使用。這里只是做了一個非常簡單的介紹&#xff0c;后續工作中如果有用到相關的知識&#xff…

python的各種推導式(列表推導式、字典推導式、集合推導式)

python的各種推導式&#xff08;列表推導式、字典推導式、集合推導式&#xff09; 推導式comprehensions&#xff08;又稱解析式&#xff09;&#xff0c;是Python的一種獨有特性。推導式是可以從一個數據序列構建另一個新的數據序列的結構體。 共有三種推導&#xff0c;在Pyt…

原生js實現jquery庫中選擇器的功能(jquery庫封裝一)

今天是2017.1.1&#xff0c;新的一天&#xff0c;新的一年&#xff0c;新的一年里繼續夯實基礎知識&#xff0c;在工作中多些項目&#xff0c;多思考&#xff0c;多總結&#xff0c;前端是不斷更新&#xff0c;在更新的過程中也是發現樂趣和挑戰自我的過程&#xff0c;希望年輕…

Ubantu下使用vi時,方向鍵變字母輸出、退格鍵無法刪除字符的解決辦法

目錄前言&#xff1a;一、編輯/etc/vim/vimrc.tiny二、安裝vim full版本三、添加”.vimrc”文件 目錄 前言&#xff1a; 最近由于要玩TensorFlow&#xff0c;所以把塵封已久的Ubantu給打開了&#xff0c;不過配置網絡的時候&#xff0c;算是一團糟&#xff0c;出現了在插入模…

《Python爬蟲開發與項目實戰》——第3章 初識網絡爬蟲 3.1 網絡爬蟲概述

本節書摘來自華章計算機《Python爬蟲開發與項目實戰》一書中的第3章&#xff0c;第3.1節&#xff0c;作者&#xff1a;范傳輝著&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看 第3章 初識網絡爬蟲 從本章開始&#xff0c;將正式涉及Python爬蟲的開發。本章…

【python】解決:TypeError: can't send non-None value to a just-started generator

在一個生成器函數未啟動之前&#xff0c;是不能傳遞數值進去。必須先傳遞一個None進去或者調用一次next(g)方法&#xff0c;才能進行傳值操作 def product(c):# c.send(None)for i in range(5):print("生產者產生數據%d"%i)r c.send(str(i))print("消費者消費了…