標籤:

Python 爬蟲|深入請求(二):URL

大家好!我是廈門大學王亞南經濟研究院的大一學生,今天將由我來為大家介紹URL的結構與構造。

註:非商業轉載註明作者即可,商業轉載請聯繫作者授權並支付稿費。本人已授權「維權騎士」網站(rightknights.com)對我在知乎發布文章的版權侵權行為進行追究與維權。

--------------------------------------我是萌噠噠的分割線-------------------------------------------------------

首先先讓我們來看一看什麼是URL( the full name of URL is uniform resource locator)。每個網頁就像一個商店,網頁上的每個信息(稱為一種資源)就像商店中的一種商品一般。就像每種商品都擁有自己的編號一般,這些資源也擁有自己的編號—那便是URL。

首先讓我們通過具體例子了解下URL的具體結構:

channel.jd.com/1713-325(這是京東書城的URL)

nn例子中URL的第一部分(http) 是 URL scheme. 常見的有http, https兩種協議方式

nn URL的第二部分 (channel.jd.com) 是伺服器的位置. This tells the webnclient where the resource is hosted.

nn 第三部分(/1713-3258.html) 是具體資源的路徑。它告訴我們將請求哪些具體的資源

第一部分和第二部分用「://」符號隔開,

第二部分和第三部分用「/」符號隔開。

第一部分和第二部分是不可缺少的,第三部分有時可以省略

在URL中不同的參數使用&進行連接。

一般來說,URL通常由以下幾個主要部分構成:

nnnn<scheme>://<host>:<port>/<path>;<params>?<query>#<frag>

scheme用來表示協議的方式一般為http或https。

host以及port用來表示欲連接伺服器的位置

nnpath用來表示具體資源的路徑名,params 用來表示請求中一些具體的參數,是爬蟲中需要構造的部分,通常與頁數或者你請求資源的名稱相關。

query則表示查詢 (例如:zhihu.com/search?在知乎上搜索python)

URL編碼是一種瀏覽器用來打包表單輸入的格式。在python中我們可以調用 urllib 模塊。

urllib.quote(urldata)將獲取的數據編碼從而適用於字元串中。

urllib.quote_plus()除了實現上述功能之外還可以將kong

現在讓我們具體看下URL的構造:

(1)URL是有規律的,例如說:

第二頁:texindex.com.cn/news/jg

第三頁:texindex.com.cn/news/jg

第四頁:texindex.com.cn/news/jg

可以十分容易地看出這些URL中變化的僅僅是index之後的參數。因此可以考慮使用字元串的拼接(join或者直接用+)以及for循環(找好starting以及ending point)來構造出相應的URL,分布進行請求。

(2)構造複雜的URL:

例如在京東頁面上搜索「醬油」,他的URL是這樣的:

search.jd.com/Search?

首先進行URL轉碼,轉碼之後的結果是:

search.jd.com/Search?醬油&enc=utf-8&wq=醬油&pvid=gxsqs7qi.8lr938#keyword=醬油&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&offset=3&page=3&s=58&click=0

page之後的參數控制頁數keyword里的參數控制種類,對於其他參數有沒有,可以通過字元串拼接的方式,逐個去除一些參數在進行requests請求(在python中進行)以確定最終的URL結構。

(3)URL是沒有太多規律的:

比如說我們想抓取上圖中所有二級鏈接的具體信息:

nn但這些URL後面的參數卻是難以構造的,甚至是毫無規律的。這時候我們可以考慮先用一個爬蟲抓完所有的 URL,生成一個list之後再對 list 中所有的URL進行遍歷進行requests請求,即可實現。

當然實際情況下 URL 的構造生成方法還有很多,這裡僅例舉幾種比較常見的方法。

--------------------------------------我是萌噠噠的分割線-------------------------------------------------------

更多項目介紹,請關注我們的項目專欄:Chinas Prices Project - 知乎專欄

項目聯繫方式:

  • 項目郵箱(@iGuo 的郵箱):zhangguocpp@163.com

  • 申請加入項目,請聯繫人事負責人@Suri :liuxiaomancpp@163.com
  • 知乎:@iGuo@Suri(項目負責人) @林行健@Dementia (技術負責人)@張土不 (財務負責人)@好大一棵樹(運維負責人)

推薦閱讀:

那些年我們寫過的爬蟲
從零開始寫Python爬蟲 --- 2.4 爬蟲實踐:代理的爬取和驗證

TAG:爬虫 |